【问题标题】:c++ SQLGetDiagRec returns addressesc++ SQLGetDiagRec 返回地址
【发布时间】:2015-06-02 08:09:48
【问题描述】:

我正在编写函数来调用 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 对象(用于记录的文本文件)

这种行为的原因在哪里?

【问题讨论】:

    标签: c++ odbc


    【解决方案1】:

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

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

    【讨论】:

    • 一行答案:std::string str(c_str, strnlen(c_str, max_length));这里有几个答案:stackoverflow.com/questions/8126498/…
    • 但是 msg 没有声明为 chars 的指针数组,它是 SQLWCHAR 数组。
    猜你喜欢
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多