SQLSTATE 映射
本主题讨论 ODBC 2.x 和 ODBC 3.x 的 SQLSTATE 值。 有关 ODBC 3.x SQLSTATE 值的详细信息,请参阅附录 A:ODBC 错误代码。
在 ODBC 3.x 中,返回 HYxxx SQLSTATE 而不是 S1xxx,返回 42Sxx SQLSTATE 而不是 S00XX。 这样做是为了符合开放组和 ISO 标准。 在许多情况下,映射不是一对一,因为标准已重新定义一些 SQLSTATE 的解释。
将 ODBC 2.x 应用程序升级到 ODBC 3.x 应用程序后,必须将应用程序更改为需要 ODBC 3.x SQLSTATE 而不是 ODBC 2.x SQLSTATE。 下表列出了每个 ODBC 2.x SQLSTATE 映射至的 ODBC 3.x SQLSTATE。
当 SQL_ATTR_ODBC_VERSION 环境属性设置为 SQL_OV_ODBC2 时,驱动程序在调用 SQLGetDiagField 或 SQLGetDiagRec 时发布 ODBC 2.x SQLSTATE 而不是 ODBC 3.x SQLSTATE。 可以通过在下表第 1 列中备注与第 2 列中 ODBC 3.x SQLSTATE 对应的 ODBC 2.x SQLSTATE 来确定特定的映射。
ODBC 2.x SQLSTATE | ODBC 3.x SQLSTATE | 注释 |
---|---|---|
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 | 如果基础函数为 SQLBindCol、SQLColAttribute、SQLExtendedFetch、SQLFetch、SQLFetchScroll 或 SQLGetData,则 ODBC 2.x SQLSTATE S1002 映射至 ODBC 3.x SQLSTATE 07009。 |
S1003 | HY003 | |
S1004 | HY004 | |
S1008 | HY008 | |
S1009 | HY009 | 因无效使用空指针而返回。 |
S1009 | HY024 | 因无效属性值而返回。 |
S1009 | HY092 | 当并发为只读时,因通过调用 SQLSetPos 更新或删除数据而返回,或因通过调用 SQLBulkOperations 添加、更新或删除数据而返回。 |
S1010 | HY007 HY010 | 当在调用 SQLPrepare、SQLExecDirect 或为 StatementHandle 调用目录函数之前调用了 SQLDescribeCol 时,SQLSTATE S1010 映射至 SQLSTATE HY007。 否则,SQLSTATE S1010 映射至 SQLSTATE HY010。 |
S1011 | HY011 | |
S1012 | HY012 | |
S1090 | HY090 | |
S1091 | HY091 | |
S1092 | HY092 | |
S1093 | 07009 | 如果基础函数为 SQLBindParameter 或 SQLDescribeParam,则 ODBC 3.x SQLSTATE 07009 映射至 ODBC 2.x SQLSTATE S1093。 |
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 |
注意
ODBC 3.x SQLSTATE 07008 映射至 ODBC 2.x SQLSTATE S1000。