SQL Server Native Client OLE DB 提供者會定義提供者特定的錯誤介面 ISQLServerErrorInfo。 介面會傳回 SQL Server 錯誤的詳細數據,而且當命令執行或數據列集作業失敗時,會非常有價值。
有兩種方式可以取得 ISQLServerErrorInfo 介面的存取權。
取用者可以呼叫 IErrorRecords::GetCustomerErrorObject 來取得 ISQLServerErrorInfo 指標,如下列程式代碼範例所示。 (不需要取得 ISQLErrorInfo.) ISQLErrorInfo 和 ISQLServerErrorInfo 都是自定義的 OLE DB 錯誤物件, ISQLServerErrorInfo 是用來取得伺服器錯誤資訊的介面,包括程式名稱和行號等詳細數據。
// Get the SQL Server custom error object.
if(FAILED(hr=pIErrorRecords->GetCustomErrorObject(
nRec, IID_ISQLServerErrorInfo,
(IUnknown**)&pISQLServerErrorErrorInfo)))
另一個取得ISQLServerErrorInfo指標的方法,是在已取得的ISQLErrorInfo指標上呼叫 QueryInterface 方法。 請注意,由於ISQLServerErrorInfo包含ISQLErrorInfo所提供的資訊超集,因此透過 GetCustomerErrorObject 直接移至 ISQLServerErrorInfo 是有道理的。
ISQLServerErrorInfo 介面會公開一個成員函式 ISQLServerErrorInfo::GetErrorInfo。 函式會傳回 SSERRORINFO 結構的指標,以及字串緩衝區的指標。 這兩個指標參考記憶體,取用者必須使用 IMalloc::Free 方法解除分配。
SSERRORINFO 結構成員由取用者解譯,如下所示。
| 會員 | 說明 |
|---|---|
| pwszMessage | SQL Server 錯誤訊息。 與 IErrorInfo::GetDescription 中所傳回的字串相同。 |
| pwszServer | 會話之 SQL Server 實例的名稱。 |
| pwszProcedure | 如果適當,則為產生錯誤的程序名稱。 否則為空字串。 |
| lNative | SQL Server 原生錯誤號碼。 與 ISQLErrorInfo::GetSQLInfo 之 plNativeError 參數中傳回的值相同。 |
| bState | SQL Server 錯誤訊息的狀態。 |
| bClass | SQL Server 錯誤訊息的嚴重性。 |
| wLineNumber | 適用時,發生錯誤的預存程式的行號。 |