Reply to bcp_init and SQL Native Client

Your name:

Reply:


Posted by Peter on 06/13/07 14:23

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

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация