error-handling - SQLExecDirect 失败但 SQLGetDiagRec 没有数据

标签 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 请求导致的错误不起作用吗?

最佳答案

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

关于error-handling - SQLExecDirect 失败但 SQLGetDiagRec 没有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642347/

相关文章:

asp.net-mvc - 我如何使用HttpResponseMessage HttpStatusCode分隔web.config httpErrors

php - 未捕获的 OAuthException - 如何捕获此错误?

php - PHP-捕获引发错误的代码

go - 如何在 golang 中记录类型断言错误?

MySQL 连接提示输入密码,即使它在连接字符串中

mysql - 使用 odbc 从 perl 访问 mysql

python - 我收到了 “nonetype”错误,但我不知道为什么

python-3.x - 有没有办法在 pandas read_sql 函数中设置超时?

excel - 运行时错误 '-2147217871 (80040e31)' : Query timeout expired

jdbc - 我们可以使用 JDBC 连接器获取 Power BI 中的数据吗