處理錯誤與訊息

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics 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) 中新增錯誤追蹤增強功能的詳細資訊,請參閱存取擴充事件記錄檔中的診斷資訊

本節內容

另請參閱

SQL Server Native Client (ODBC)