SQL Server エラーの詳細
SQL Server Native Client OLE DB プロバイダーは、プロバイダー固有のエラー インターフェイスである ISQLServerErrorInfo を定義します。 このインターフェイスにより、SQL Server エラーの詳細が返されるので、コマンドの実行や行セットの操作が失敗したときに役立ちます。
ISQLServerErrorInfo インターフェイスにアクセスする方法は 2 つあります。
次のコード サンプルに示すように、コンシューマーは 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 ポインターを取得するもう 1 つの方法は、既に取得した 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 |
該当する場合は、ストアド プロシージャでエラーが発生した行番号です。 |