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 结构成员由使用者解释,如下所示。
| 成员 | DESCRIPTION |
|---|---|
| pwszMessage | SQL Server 错误消息。 与 IErrorInfo::GetDescription 中返回的字符串相同。 |
| pwszServer | 会话的 SQL Server 实例的名称。 |
| pwszProcedure | 如果适用,则为错误的来源过程的名称。 否则为空字符串。 |
| lNative | SQL Server 本机错误号。 与 ISQLErrorInfo::GetSQLInfo 的 plNativeError 参数中返回的值相同。 |
| bState | SQL Server 错误消息的状态。 |
| bClass | SQL Server 错误消息的严重性。 |
| wLineNumber | 如果适用,发生错误的存储过程的行号。 |