我试图在使用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请求而导致的错误?
答案 0 :(得分:0)
当您调用SQLGetDiagRec时,传递SQL_HANDLE_STMT和您的语句句柄(在您的示例中为hstmt)。这应该返回与该特定语句相关的错误。