Detalles de errores de SQL Server
El proveedor OLE DB de SQL Server Native Client define la interfaz de errores específica de proveedor ISQLServerErrorInfo. La interfaz devuelve más detalles acerca de un error de SQL Server y resulta útil cuando se produce un error en la ejecución del comando o en operaciones de conjunto de filas.
Hay dos maneras de obtener acceso a la interfaz ISQLServerErrorInfo.
El consumidor puede llamar a IErrorRecords::GetCustomerErrorObject para obtener un puntero ISQLServerErrorInfo, tal como se muestra en el ejemplo de código siguiente. (No hay ninguna necesidad de obtener ISQLErrorInfo). ISQLErrorInfo e ISQLServerErrorInfo son objetos de error de OLE DB personalizados; ISQLServerErrorInfo es la interfaz que se utiliza para obtener información de errores de servidor, incluidos detalles como el nombre de procedimiento y los números de línea.
// Get the SQL Server custom error object.
if(FAILED(hr=pIErrorRecords->GetCustomErrorObject(
nRec, IID_ISQLServerErrorInfo,
(IUnknown**)&pISQLServerErrorErrorInfo)))
Otra manera de obtener un puntero ISQLServerErrorInfo consiste en llamar al método QueryInterface en un puntero ISQLErrorInfo ya obtenido. Tenga en cuenta que, como ISQLServerErrorInfo contiene un superconjunto de la información disponible en ISQLErrorInfo, conviene pasar directamente a ISQLServerErrorInfo a través de GetCustomerErrorObject.
La interfaz ISQLServerErrorInfo expone una función miembro, ISQLServerErrorInfo::GetErrorInfo. La función devuelve un puntero a una estructura SSERRORINFO y un puntero a un búfer de cadena. Ambos punteros hacen referencia a la memoria que el consumidor debe desasignar utilizando el método IMalloc::Free.
El consumidor interpreta los miembros de la estructura SSERRORINFO de la siguiente manera.
Miembro |
Descripción |
---|---|
pwszMessage |
Mensaje de error de SQL Server. Idéntico a la cadena que se devuelve en IErrorInfo::GetDescription. |
pwszServer |
Nombre de la instancia de SQL Server en la sesión. |
pwszProcedure |
Si procede, nombre del procedimiento donde se ha producido el error. De lo contrario, una cadena vacía. |
lNative |
Número del error nativo de SQL Server. Idéntico al valor que se devuelve en el parámetro plNativeError de ISQLErrorInfo::GetSQLInfo. |
bState |
Estado de un mensaje de error de SQL Server. |
bClass |
Gravedad de un mensaje de error de SQL Server. |
wLineNumber |
Si procede, número de línea del procedimiento almacenado donde se produjo el error. |