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。