SQL Server 错误详细信息

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 如果适用,则为发生错误的存储过程的行号。

另请参阅

错误
RAISERROR (Transact-SQL)