SQLOLEDB defines the provider-specific error interface ISQLServerErrorInfo. The interface returns more detail about a Microsoft® SQL Server™ error and is valuable when command execution or rowset operations fail.
There are two ways to obtain access to ISQLServerErrorInfo interface.
The consumer may call IErrorRecords::GetCustomerErrorObject (no need to obtain ISQLErrorInfo) to obtain an ISQLServerErrorInfo pointer (as shown in the code fragment below). Both ISQLErrorInfo and ISQLServerErrorInfo are custom OLE DB error objects, with ISQLServerErrorInfo being the interface to use to obtain information of server errors including such details as procedure name and line numbers.
//Get SQLServer custom error object
if(FAILED(hr=pIErrorRecords->GetCustomErrorObject(
nRec,
IID_ISQLServerErrorInfo,
(IUnknown**)&pISQLServerErrorErrorInfo)))
Another way to get an ISQLServerErrorInfo pointer is to call the QueryInterface method on an already obtained ISQLErrorInfo pointer. Do note that because ISQLServerErrorInfo contains a superset of the information available from ISQLErrorInfo, it makes sense to go directly to ISQLServerErrorInfo through GetCustomerErrorObject.
The ISQLServerErrorInfo interface exposes one member function, GetErrorInfo. The function returns a pointer to an SSERRORINFO structure and a pointer to a string buffer. Both pointers reference memory the consumer must deallocate by using the IMalloc::Free method.
SSERRORINFO structure members are interpreted by the consumer as follows.
Member | Description |
---|---|
pwszMessage | SQL Server error message. Identical to the string returned in IErrorInfo::GetDescription. |
pwszServer | Name of the session’s SQL Server. |
pwszProcedure | If appropriate, the name of the procedure in which the error originated. An empty string otherwise. |
lNative | SQL Server native error number. Identical to the value returned in the plNativeError parameter of ISQLErrorInfo::GetSQLInfo. |
bState | State of a SQL Server error message. |
bClass | Severity of a SQL Server error message. |
wLineNumber | When applicable, the line number of a stored procedure on which the error occurred. |