All ODBC calls return a result code. The most common result codes are the following:
SQL_SUCCESS SQL_SUCCESS_WITH_INFO SQL_ERROR
SQL_SUCCESS indicates that the call was successful.
SQL_SUCCESS_WITH_INFO indicates that the
call completed successfully, possibly with a nonfatal error (warning). The Client will sometimes
suppress such warnings if they are expected; in all other cases, these warnings are displayed.
SQL_ERROR indicates that the call encountered an error. In case of errors, the Client will interrogate
ODBC to get the details of the error it displays.
Diagnostic messages may include several error messages. Each of these errors includes an
SQLSTATE that provides detailed information about the cause of a warning or error and a
diagnostic message that includes a native error code (generated by SQL Server). An example of such
an error is:
RetCode = SQL_SUCCESS_WITH_INFO, SQLState = 01000; native_error = 5701, error = [Microsoft][SQL Native Client][SQL Server]Changed database context to 'TESTDB'.
This message is generated when the Client connects to the database. The native error of 5701 is generated by SQL Server.
The following example illustrates an error that typically occurs during the fixup phase. The client suppresses such messages during the fixup phase, but displays them during the change tracking phase.
RetCode = SQL_ERROR, SQLState = 23000; native_error = 2601, error = [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot insert duplicate key row in object 'customer' with unique index 'customer_set'.
In some situations you may get multiple error messages caused by the same event. These kinds of error messages are generated at different levels of the ODBC interface. The Client uses the
native_error code in all cases that involve errors generated by the database.