ALL,
我试图通过ODBC调用数据库获得连接。 DSN已配置,我可以毫无问题地运行数据库引擎。但是尝试通过SQLConnect()调用从我的程序连接失败。
我强烈怀疑这是因为我没有将dsn从std :: string正确转换为SQLCHAR *。这是我正在使用的代码:
std::string selectedDSN;
SQLCHAR *dsn;
dsn = new unsigned char[selectedDSN.length() + 1];
strcpy( (char *) dsn, selectedDSN );
ret = SQLConnect( hdbc, (SQLCHAR *) dsn, SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0 );
if( ret != SQL_SUCCESS || ret != SQL_SUCCESS_WITH_INFO )
{
ret = SQLGetDiagRec( SQL_HANDLE_ENV, env, 1, sqlstate, &native_error, msg, sizeof( msg ), &msglen );
std::wstring temp( msg );
std::string t( temp.begin(), temp.end() );
errorMsg = t;
result = 1;
}
我在这里的转换来自this链接。以下调用
但是“ret”变量设置为-1,以下对SQLGetDiagRec()的调用返回100(SQL_SUCCESS_WITH_INFO。
答案 0 :(得分:0)
问题在于:
if( ret != SQL_SUCCESS || ret != SQL_SUCCESS_WITH_INFO )
此表达式始终为true。改为:
if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
^^