dbTalk Databases Forums  

bcp_init and SQL Native Client

comp.databases.ms-sqlserver comp.databases.ms-sqlserver


Discuss bcp_init and SQL Native Client in the comp.databases.ms-sqlserver forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Peter
 
Posts: n/a

Default bcp_init and SQL Native Client - 06-13-2007 , 09:23 AM






Hi all,

I am having trouble to get the bulk copy operations working in
collaboration with SQL Native Client.

My test program crashed with an access violation in the call to
bcp_init.

I know that the error is probably mine, but I cannot find any
mistakes.

I have include the C++ source below, and I hope that someone can help
me:

#include <windows.h>
#include <oledb.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#define _SQLNCLI_ODBC_
#include <sqlncli.h>

#include <cassert>
#include <iostream>

namespace
{

HENV createEnvironment()
{
HENV environment;
SQLRETURN result;

result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,
&environment);

if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
{
throw std::runtime_error("SQLAllocHandle failed");
}

result = SQLSetEnvAttr(environment, SQL_ATTR_ODBC_VERSION,
reinterpret_cast <SQLPOINTER> (SQL_OV_ODBC3), SQL_IS_INTEGER);

if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
{
throw std::runtime_error("SQLSetEnvAttr failed");
}

return environment;
}

SQLHDBC createConnection(HENV environment)
{
SQLHDBC connection;
SQLRETURN result;

result = SQLAllocHandle(SQL_HANDLE_DBC, environment, &connection);

if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
{
throw std::runtime_error("SQLAllocHandle failed");
}

// Need to set this prior to connection.

result = SQLSetConnectAttr(connection, SQL_COPT_SS_BCP, (void*)
SQL_BCP_ON,
SQL_IS_INTEGER);

result = SQLConnect(connection, reinterpret_cast <SQLCHAR*> (
const_cast <char*> ("database")), SQL_NTS, reinterpret_cast
<SQLCHAR*> (
const_cast <char*> ("user")), SQL_NTS, reinterpret_cast <SQLCHAR*>
(
const_cast <char*> ("password")), SQL_NTS);

if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
{
throw std::runtime_error("SQLConnect failed");
}

return connection;
}

int realMain(int argc, char *argv[])
{
HENV environment = createEnvironment();
SQLHDBC connection = createConnection(environment);
RETCODE result;

result = bcp_init(connection, "testdata", 0, 0, DB_IN);

assert(result != FAIL);

return 0;
}

} // anonymous namespace

int main(int argc, char* argv[])
{
try
{
return realMain(argc, argv);
}

catch (const std::exception& ex)
{
std::cerr << "exception: " << ex.what() << std::endl;
}

return 1;
}


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.