我正在编写函数来调用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对象(用于记录的文本文件)
这种行为的原因在哪里?
答案 0 :(得分:0)
Msg返回chars的指针数组,所以如果你直接输出它,它只会写出数组第一个字符的地址。
一种解决方案是在将其转换为流之前将其转换为std :: string。