處理錯誤與訊息
當應用程式呼叫 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 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 以擷取訊息資料。
如需追蹤錯誤的資訊,請參閱 Data Access Tracing (資料存取追蹤)。 如需 SQL Server 2012 中所新增錯誤追蹤增強功能的相關資訊,請參閱存取擴充事件記錄檔中的診斷資訊。