2016-11-16 65 views
1

我想在使用ODBC的程序中設置一些有用的錯誤處理。根據文檔如果SQLExecDirect返回SQL_ERROR我應該能夠調用SQLGetDiagRec來獲取SQL_STATE和可能的一些消息,但在我的測試中,當我從SQLExecDirect獲取錯誤後立即調用SQLGetDiagRec時,我得到SQL_NO_DATA返回並且沒有任何信息。SQLExecDirect失敗,但SQLGetDiagRec沒有數據

代碼:

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

你有沒有想過這件事?我看到同樣的事情。 – DougN

回答

0

當你調用SQLGetDiagRec時,傳遞SQL_HANDLE_STMT和你的語句句柄(在你的例子中是hstmt)。這應該會返回與該特定語句相關的錯誤。

相關問題