c ++ SQLGetDiagRec返回地址

时间:2015-06-02 08:09:48

标签: c++ odbc

我正在编写函数来调用Oracle中的存储过程。当尝试调用SQLConnectA时,它失败,并且SQLGetDiagRec返回一些奇怪的数字,这看起来像内存地址而不是诊断消息。产生此错误的代码是

    ret = SQLConnectA(hORAdbc, (SQLCHAR*)DCDSN.c_str(), DCDSN.length(), (SQLCHAR*)DCUSR.c_str(), DCUSR.length(), (SQLCHAR*)DCPWD.c_str(), DCPWD.length());
if (ret != SQL_SUCCESS) {

    rc = SQLGetDiagRec(SQL_HANDLE_DBC, hORAdbc, 1, SqlState, &NativeError, Msg, sizeof(Msg), &MsgLen);
    appfile << "MAIN:SQLConnectA hORAdbc> SQLSTATE: " << SqlState << " NativeError: " << NativeError << " Msg: " << Msg << endl;

    return 0;
}

注意:appfile是ofstream对象(用于记录的文本文件)

这种行为的原因在哪里?

1 个答案:

答案 0 :(得分:0)

Msg返回chars的指针数组,所以如果你直接输出它,它只会写出数组第一个字符的地址。

一种解决方案是在将其转换为流之前将其转换为std :: string。