La copie en bloc SQL pour les clients natifs provoque une violation d'accès

c++ sqlbulkcopy sql-server

Question

J'ai une application Windows qui copie en bloc les données dans une table SQL à l'aide des fonctions bcp_xxx() et d'un connecteur ODBC standard "SQL Server".

Je souhaite passer à la prise en charge des connexions clientes SQL natives

D'après ce que j'ai vu, tout ce que j'ai à faire, c'est d'ajouter

#define _SQLNCLI_ODBC_
#include <sqlncli.h>

en haut du fichier cpp et liez-vous à "sqlncli10.lib" plutôt qu'à "odbcbcp.lib".

Cependant, lorsque j'appelle bcp_bind() , j'obtiens le Access violation reading location 0xffffffffffffffff " Access violation reading location 0xffffffffffffffff ". Cela se produit avec les connexions ODBC "serveur SQL" et "client natif SQL".

Le code en cours d'exécution est:

SQLHANDLE hEnv;
SQLHANDLE hConnection;
LPCBYTE data = (LPCBYTE)malloc(100);

SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hConnection);
SQLSetConnectAttr(hConnection, SQL_COPT_SS_BCP, (void *)SQL_BCP_ON, SQL_IS_INTEGER) ;
SQLConnect(hConnection, "DSN", SQL_NTSL, NULL, 0, NULL, 0);
bcp_init(hConnection, "DB_TABLE", NULL, NULL, DB_IN);
bcp_bind(hConnection, data, 0, SQL_VARLEN_DATA, (LPCBYTE)"", 1, SQLCHARACTER, 1);

Réponse populaire

Le problème semble être dû à l'utilisation de connexions ODBC "serveur SQL" en même temps que les routines de copie en bloc tentent d'utiliser des connexions natives.

Si je modifie toutes les autres connexions ODBC pour qu'elles soient SQL Native, les routines de copie en bloc fonctionnent correctement.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi