SQL Server エラーの詳細
SQL 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 |
該当する場合は、ストアド プロシージャでエラーが発生した行番号です。 |