【问题标题】:How do I get a connection?我如何获得连接?
【发布时间】:2015-11-12 02:45:44
【问题描述】:

所有,

我正在尝试通过 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。

【问题讨论】:

    标签: c++ visual-c++ odbc


    【解决方案1】:

    问题出在这里:

    if( ret != SQL_SUCCESS || ret != SQL_SUCCESS_WITH_INFO )
    

    这个表达式总是正确的。改为:

    if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
                           ^^
    

    【讨论】:

    • 它不会改变任何东西。对 SQLConnect 的调用仍然返回“-1”或 SQL_ERROR。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2022-07-23
    • 1970-01-01
    • 2013-10-06
    • 2014-03-30
    • 2017-05-18
    • 2010-11-15
    相关资源
    最近更新 更多