處理錯誤與訊息
當應用程式呼叫 ODBC 函數時,驅動程式會以兩種方式執行函數並傳回診斷資訊:傳回碼會指出整體 ODBC 函數成功或失敗,而診斷記錄會提供函數的相關詳細資訊。 診斷記錄包含標頭記錄和狀態記錄。 即使函數成功,也會傳回至少一個診斷記錄,也就是標頭記錄。
診斷資訊會在開發時間用於捕捉程式設計錯誤,例如,在硬式編碼 SQL 陳述式中發生無效的控制代碼和語法錯誤。 該資訊也會在執行階段用於捕捉執行階段錯誤和警告,例如,使用者傳回的 SQL 陳述式中發生資料截斷、規則違規和語法錯誤。 程式邏輯通常會以傳回碼為基礎。
例如,應用程式呼叫 SQLFetch 來擷取結果集中的資料列後,如果傳回任何參考用的訊息 (SQL_SUCCESS_WITH_INFO),或發生錯誤 (SQL_ERROR),傳回碼會指出是否達到結果集的結尾 (SQL_NO_DATA)。
如果 SQL Server Native Client ODBC 驅動程式傳回 SQL_SUCCESS 以外的任何東西,應用程式可以呼叫 SQLGetDiagRec 來擷取任何參考用的訊息或錯誤訊息。 如果有一個以上的訊息,使用 SQLGetDiagRec 上下捲動訊息集。
傳回碼 SQL_INVALID_HANDLE 永遠會指出程式設計錯誤,而且絕不會在執行階段發生。 雖然 SQL_ERROR 可能會指出程式設計錯誤,其他所有傳回碼還是會提供執行階段資訊。
原始的 Microsoft SQL Server 原生 API (也就是 DB-Library for 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 中加入之錯誤追蹤增強功能的詳細資訊,請參閱<存取擴展事件記錄檔中的診斷資訊>。