SQLExecDirect失败但SQLGetDiagRec没有数据

时间:2016-11-16 21:08:17

标签: error-handling odbc

我试图在使用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请求而导致的错误?

1 个答案:

答案 0 :(得分:0)

当您调用SQLGetDiagRec时,传递SQL_HANDLE_STMT和您的语句句柄(在您的示例中为hstmt)。这应该返回与该特定语句相关的错误。