2016-11-16 25 views
1

ODBCを使用したプログラムでいくつかの有用なエラー処理をセットアップしようとしています。ドキュメントによると、SQLExecDirectがSQL_ERRORを返す場合は、SQL_STATEといくつかのメッセージを取得するためにSQLGetDiagRecを呼び出すことができますが、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)を渡します。その特定のステートメントに関連するエラーを返す必要があります。

関連する問題