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