處理錯誤與訊息
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
當應用程式呼叫 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 (11.x) 中新增錯誤追蹤增強功能的詳細資訊,請參閱存取擴充事件記錄檔中的診斷資訊。