我正在尝试在使用 ODBC 的程序中设置一些有用的错误处理。根据文档,如果 SQLExecDirect 返回 SQL_ERROR,我应该能够调用 SQLGetDiagRec 来获取 SQL_STATE 以及可能的一些消息,但在我的测试中,当我在从 SQLExecDirect 收到错误后立即调用 SQLGetDiagRec 时,我会返回 SQL_NO_DATA,但没有任何信息。
代码:
result = SQLExecDirect(hstmt, <SQL Statement>, SQL_NTS);
if(result == SQL_ERROR)
{
SQLSMALLINT msg_len = 0;
SQLCHAR sql_state[6], message[256];
SQLINTEGER native_error = 0;
result = SQLGetDiagRec(SQL_HANDLE_DBC, hDbc, 1, sql_state, &native_error, message, countof(message), &msg_len);
// Here 'result' is SQL_NO_DATA
....
}
它适用于其他情况,只是由于某种原因不适用于 SQLExecDirect。我还知道应该循环遍历 SQLGetDiagRec 结果,但如果第一个结果返回 SQL_NO_DATA,根据文档,这意味着没有更多结果。
我测试它的具体错误是请求一个不存在的表。
为了至少获得一个错误代码,我还需要做些什么吗?或者诊断对于不正确的 SQL 请求导致的错误不起作用吗?
最佳答案
当您调用 SQLGetDiagRec 时,请传递 SQL_HANDLE_STMT 和您的语句句柄(示例中为 hstmt)。这应该返回与该特定语句相关的错误。
关于error-handling - SQLExecDirect 失败但 SQLGetDiagRec 没有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642347/