共用方式為


處理錯誤和訊息

當應用程式呼叫 ODBC 函式時,驅動程式會執行函式,並以兩種方式傳回診斷資訊:傳回碼表示 ODBC 函式的整體成功或失敗,而診斷記錄會提供函式的詳細資訊。 診斷記錄包括標頭記錄和狀態記錄。 即使函式成功,也會傳回至少一個診斷記錄,也就是標頭記錄。

在開發階段會使用診斷資訊來攔截程式設計錯誤,例如硬式編碼 SQL 語句中的無效句柄和語法錯誤。 它也會在運行時間用來攔截運行時間錯誤和警告,例如使用者輸入的SQL語句中的數據截斷、規則違規和語法錯誤。 程序邏輯通常以傳回碼為基礎。

例如,在應用程式呼叫 SQLFetch 以擷取結果集中的數據列之後,傳回碼會指出是否已到達結果集的結尾(SQL_NO_DATA)、如果傳回任何參考訊息(SQL_SUCCESS_WITH_INFO),或發生錯誤(SQL_ERROR)。

如果 SQL Server Native Client ODBC 驅動程式傳回SQL_SUCCESS以外的任何專案,應用程式可以呼叫 SQLGetDiagRec 來擷取任何參考或錯誤訊息。 如果有一個以上的訊息,請使用 SQLGetDiagRec 來向上和向下卷動訊息集。

傳回碼SQL_INVALID_HANDLE一律表示程序設計錯誤,而且不應該在運行時間遇到。 所有其他傳回碼都提供運行時間資訊,不過SQL_ERROR可能表示程序設計錯誤。

原始Microsoft SQL Server 原生 API,DB-Library 適用於 C,可讓應用程式安裝傳回錯誤或訊息的回呼錯誤處理和訊息處理函式。 某些 Transact-SQL 語句,例如 PRINT、RAISERROR、DBCC 和 SET,會將結果傳回至 DB-Library 訊息處理程式函式,而不是傳回結果集。 不過,ODBC API 沒有這類回呼功能。 當 SQL Server Native Client ODBC 驅動程式偵測到從 SQL Server 傳回的訊息時,它會將 ODBC 傳回碼設定為SQL_SUCCESS_WITH_INFO或SQL_ERROR,並以一或多個診斷記錄傳回訊息。 因此,ODBC 應用程式必須仔細測試這些傳回碼,並呼叫 SQLGetDiagRec 來擷取訊息數據。

如需追蹤錯誤的相關信息,請參閱 資料存取追蹤。 如需 SQL Server 2012 中新增之錯誤追蹤增強功能的資訊,請參閱 存取擴充事件記錄中的診斷資訊

本節中

另請參閱

SQL Server Native Client (ODBC)