MDAC 2.5 SDK - ODBC Programmer's Reference
Chapter 17: Programming Considerations


 

SQLSTATE Mappings

In ODBC 3.x, HYxxx SQLSTATEs are returned instead of S1xxx, and 42Sxx SQLSTATEs are returned instead of S00XX. This was done to align with X/Open and ISO standards. In many cases, the mapping is not one-to-one because the standards have redefined the interpretation of several SQLSTATEs.

When an ODBC 2.x application is upgraded to an ODBC 3.x application, the application has to be changed to expect ODBC 3.x SQLSTATEs instead of ODBC 2.x SQLSTATEs. The following table lists the ODBC 3.x SQLSTATEs that each ODBC 2.x SQLSTATE is mapped to.

When the SQL_ATTR_ODBC_VERSION environment attribute is set to SQL_OV_ODBC2, the driver posts ODBC 2.x SQLSTATEs instead of ODBC 3.x SQLSTATEs when SQLGetDiagField or SQLGetDiagRec is called. A specific mapping can be determined by noting the ODBC 2.x SQLSTATE in column 1 of the following table that corresponds to the ODBC 3.x SQLSTATE in column 2.

ODBC 2.x SQLSTATE ODBC 3.x SQLSTATE Comments
01S03 01001  
01S04 01001  
22003 HY019  
22008 22007  
22005 22018  
24000 07005  
37000 42000  
70100 HY018  
S0001 42S01  
S0002 42S02  
S0011 42S11  
S0012 42S12  
S0021 42S21  
S0022 42S22  
S0023 42S23  
S1000 HY000  
S1001 HY001  
S1002 07009 ODBC 2.x SQLSTATE S1002 is mapped to ODBC 3.x SQLSTATE 07009 if the underlying function is SQLBindCol, SQLColAttribute, SQLExtendedFetch, SQLFetch, SQLFetchScroll, or SQLGetData.
S1003 HY003  
S1004 HY004  
S1008 HY008  
S1009 HY009 Returned for an invalid use of a null pointer.
S1009 HY024 Returned for an invalid attribute value.
S1009 HY092 Returned for updating or deleting data by a call to SQLSetPos, or adding, updating, or deleting data by a call to SQLBulkOperations, when the concurrency is read-only.
S1010 HY007
HY010
SQLSTATE S1010 is mapped to SQLSTATE HY007 when SQLDescribeCol is called prior to calling SQLPrepare, SQLExecDirect, or a catalog function for the StatementHandle. Otherwise, SQLSTATE S1010 is mapped to SQLSTATE HY010.
S1011 HY011  
S1012 HY012  
S1090 HY090  
S1091 HY091  
S1092 HY092  
S1093 07009 ODBC 3.x SQLSTATE 07009 is mapped to ODBC 2.x SQLSTATE S1093 if the underlying function is SQLBindParameter or SQLDescribeParam.
S1096 HY096  
S1097 HY097  
S1098 HY098  
S1099 HY099  
S1100 HY100  
S1101 HY101  
S1103 HY103  
S1104 HY104  
S1105 HY105  
S1106 HY106  
S1107 HY107  
S1108 HY108  
S1109 HY109  
S1110 HY110  
S1111 HY111  
S1C00 HYC00  
S1T00 HYT00  

Note   ODBC 3.x SQLSTATE 07008 is mapped to ODBC 2.x SQLSTATE S1000.