SQL bulk copy for native clients causes access violation

c++ sqlbulkcopy sql-server

Question

I have a windows application that does a bulk copy of data to an SQL table, using the bcp_xxx() functions and a standard "SQL Server" ODBC connector.

I want to move to supporting native SQL client connections

According to what I have seen, all I need to do is add

#define _SQLNCLI_ODBC_
#include <sqlncli.h>

to the top of the cpp file, and link against "sqlncli10.lib" rather than "odbcbcp.lib."

However, when I call bcp_bind(), I get "Access violation reading location 0xffffffffffffffff" This happens with both "SQL server" and "SQL Native Client" ODBC connections.

The code being executed is:

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);

Popular Answer

The problem appears to be due to using "SQL server" ODBC connections at the same time as the bulk copy routines are trying to use native connections.

If I change all other ODBC connections to be SQL Native, the bulk copy routines work correctly.




Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why