我正在尝试在使用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/

10-12 06:30