ODBC 中的錯誤處理
ODBC 中的錯誤是使用來自每個 ODBC 函數調用的返回值和 SQLError 函數或 SQLGetDiagRec 函數的返回值進行報告的。SQLError 函數用於 ODBC 版本 3 之前的版本(但不包括版本 3)。自版本 3 起,已不建議使用 SQLError 函數,此函數已被 SQLGetDiagRec 函數取代。
每個 ODBC 函數都返回一個 SQLRETURN,它是以下狀態代碼之一:
狀態代碼 | 說明 |
---|---|
SQL_SUCCESS | 無錯誤。 |
SQL_SUCCESS_WITH_INFO | 該函數完成,但是對 SQLError 的調用將顯示警告。 這種狀態最常見的情況是:返回的值太長,應用程序提供的緩沖區不夠用。 |
SQL_ERROR | 函數未完成,因為出現了錯誤。調用 SQLError 可獲取有關此問題的詳細信息。 |
SQL_INVALID_HANDLE | 作為參數傳遞的環境、連接或語句句柄無效。 如果在釋放句柄后再使用該句柄,或者句柄為空值指針,則通常會發生這種情況。 |
SQL_NO_DATA_FOUND | 沒有可用信息。 使用這種狀態的最常見情況是在從游標進行讀取時,這種狀態表示游標中沒有更多行。 |
SQL_NEED_DATA | 參數需要數據。 這是一項高級特性,SQLParamData 和 SQLPutData 下面的 ODBC SDK 文檔對其作了說明。 |
每個環境、連接和語句句柄都可能有與之相關聯的一個或多個錯誤或警告。每個對 SQLError 或 SQLGetDiagRec 的調用都會返回有關一個錯誤的信息,然后刪除有關該錯誤的信息。如果您不調用 SQLError 或 SQLGetDiagRec 來刪除所有錯誤,則會在執行下一個將同一句柄作為參數來傳遞的函數調用時,刪除這些錯誤。
每個對 SQLError 的調用都會傳遞三個句柄,這些句柄分別用於環境、連接和語句。第一個調用使用 SQL_NULL_HSTMT 獲取與連接相關聯的錯誤。同樣,使用 SQL_NULL_DBC 和 SQL_NULL_HSTMT 的調用將獲取任何與環境句柄相關聯的錯誤。
每個對 SQLGetDiagRec 的調用將傳遞環境、連接或語句句柄。第一個調用傳遞句柄類型 SQL_HANDLE_DBC 以獲取與連接關聯的錯誤。第二個調用傳遞句柄類型 SQL_HANDLE_STMT,以獲取與剛執行的語句相關聯的錯誤。
如果有要報告的錯誤(不是 SQL_ERROR),SQLError 和 SQLGetDiagRec 將返回 SQL_SUCCESS;如果沒有其它要報告的錯誤,則將返回 SQL_NO_DATA_FOUND。