DB Access Module for Microsoft SQL Server User’s Guide : Chapter 2 Technical Information : Error Messages
Error Messages
SourcePro DB handles errors differently depending upon how they are generated. The following sections describe error messages used with the DB Access Module for Microsoft SQL Server.
Errors and ODBC Conformance
SourcePro DB makes no attempt to simulate behavior that is not provided in the ODBC API, the ODBC SQL grammar, and Microsoft SQL Server ODBC extensions. For this reason, certain functions of the DB Interface Module are reported as errors using the error code RWDBStatus::notSupported. For example, the RWDBValue::MBString datatype is not supported, so attempts to use this type are reported as not supported.
A broad range of possible errors can originate from the Microsoft SQL Server ODBC driver, the Microsoft ODBC driver manager, the underlying network library, or the SQL Server. These errors are reported using the error code RWDBStatus::serverError. The source of the error can be determined from the message reported by the RWDBStatus::vendorMessage2() method, which contains the message header returned by the driver. Please see the Microsoft SQL Server ODBC driver documentation for more information regarding message headers.
We make no attempt to mitigate against such errors, but when an error does occur, information is transferred to objects of the DB Interface Module as described below.
Errors and RWDBStatus
When an error or warning is generated by an Access Module call to the ODBC API, information about the event is retrieved via a call to SQLGetDiagRec() and transferred to an RWDBStatus. This RWDBStatus object is passed as a parameter to the installed error handler. The following list provides the format that RWDBStatus uses to describe events reported by the ODBC driver:
errorCode: RWDBStatus::serverError if an error occurred, or RWDBStatus::ok if a warning is being generated,, or RWDBStatus::notConnected if a communication error occurred indicated by a SQLSTATE code of 08XXX; for example, "08001"
message: "SQL call failed" if an error occurred, or "Success with info" if a warning is being generated
vendorMessage1: the state parameter output from the SQLGetDiagRec() call; for example, "21S01"
vendorMessage2: the error message parameter output from the SQLGetDiagRec() call; for example, "[Microsoft][ODBC SQL Server Driver] Invalid cursor state"
vendorError1: the native error code parameter output from the call to SQLGetDiagRec()
vendorError2: the SQLRETURN code from the failed SQL function.
An application can use the mapping shown above to write an error handler that reports errors on cerr and issues warnings on clog. For example:
 
void myErrorHandler(const RWDBStatus& stat)
{
if (stat.errorCode() != RWDBStatus::ok) // Errors
cerr << stat.vendorMessage2();
else // Warnings
clog << stat.vendorMessage2();
}
All errors associated with the status will be reported.