# 错误码说明
本章节对驱动内部错误码进行说明，用于协助开发者排查定位问题。典型场景仅为常见问题场景的简化描述，不能涵盖所有可能触发该错误码的场景。若典型场景的描述与实际遇到的情况不符，请以英文错误码名称的含义和实际的报错信息为准。
#### 连接错误码
连接错误码用于描述与数据库服务器连接相关的问题，包括网络通信、认证、连接状态等。可以在调用SQLGetDiagRec接口时，设置HandleType为SQL_HANDLE_DBC，并通过NativeErrorPtr参数获取连接错误码，具体请参见[表1 连接错误码]。
 表1连接错误码 
| 错误码    | 错误码名称                                          | 典型场景                            |
|:---|:---|:---|
| -3     | CONN_ERROR_IGNORED                           | 错误已忽略。                           |
| -2  | CONN_TRUNCATED                                  | 数据被截断。                            |
| -1    | CONN_OPTION_VALUE_CHANGED                     | 选项值被自动调整。                          |
| 101   | CONNECTION_SERVER_NOT_REACHED                 | 服务器地址不可达或端口未开放。                   |
| 103    | CONNECTION_MSG_TOO_LONG                        | SQL语句过长。                          |
| 104  | CONNECTION_COULD_NOT_SEND                    | 无法发送数据到服务器，连接已断开。                |
| 105 | CONNECTION_NO_SUCH_DATABASE                   | 数据库不存在。                            |
| 106     | CONNECTION_BACKEND_CRAZY                     | 服务器返回异常响应。                      |
| 107    | CONNECTION_NO_RESPONSE                       | 服务器未响应。                           |
| 108   | CONNECTION_SERVER_REPORTED_SEVERITY_FATAL   | 服务器返回FATAL错误。                    |
| 109  | CONNECTION_COULD_NOT_RECEIVE                 | 无法从服务器接收数据。                      |
| 110    | CONNECTION_SERVER_REPORTED_SEVERITY_ERROR    | 服务器返回ERROR消息。                     |
| 112  | CONNECTION_NEED_PASSWORD                      | 需要重新认证。                           |
| 113  | CONNECTION_COMMUNICATION_ERROR               | 连接因网络问题中断。                      |
| 114   | CONNECTION_LIBPQ_STARTED_ERROR               | 等待连接建立阶段异常。                        |
| 115  | CONNECTION_LIBPQ_MADE_ERROR                    | 连接已建立，等待发送数据阶段异常。                |
| 116   | CONNECTION_LIBPQ_AWAITING_RESPONSE_ERROR      | 等待数据库响应阶段异常。                        |
| 117    | CONNECTION_LIBPQ_AUTH_OK_ERROR                 | 已完成认证，等待后端启动阶段异常。                 |
| 118  | CONNECTION_LIBPQ_SETENV_ERROR                  | 协商环境变量阶段异常。                       |
| 119   | CONNECTION_LIBPQ_SSL_STARTUP_ERROR             | 协商SSL连接阶段异常。                      |
| 120   | CONNECTION_LIBPQ_NEEDED_ERROR                  | 建立物理连接阶段异常。                     |
| 121 | CONNECTION_LIBPQ_CHECK_WRITABLE_ERROR        | 检查会话是否可读写阶段异常。                   |
| 122    | CONNECTION_LIBPQ_CONSUME_ERROR                 | 处理额外消息阶段异常。                        |
| 123  | CONNECTION_LIBPQ_CHECK_TARGET_ERROR          | 检查目标服务器属性阶段异常。                      |
| 124  | CONNECTION_LIBPQ_CHECK_STANDBY_ERROR         | 检查服务器是否处于备机模式阶段异常。                |
| 125   | CONNECTION_LIBPQ_CHECK_CLUSTER_MAINNODE_ERROR | 检查集群主节点阶段异常。                       |
| 126   | CONNECTION_LIBPQ_CHECK_PRIMARY_CLUSTER_ERROR  | 检查主备集群阶段异常。                        |
| 127   | CONNECTION_LIBPQ_SET_FINISH_CONNECT_SQL_ERROR  | 发送最后的SQL语句阶段异常。                  |
| 131     | CONNECTION_LIBPQ_UNKNOWN_CONN_ERROR          | 未知libpq阶段异常。                       |
| 132  | CONNECTION_LIBPQ_CONFIG_ERROR                | libpq配置异常。                     |
| 201    | CONN_INIREAD_ERROR                              | 连接配置文件解析失败。                     |
| 202 | CONN_OPENDB_ERROR                             | 连接数据库失败，可能是认证失败、配置异常、网络不通或服务器未启动。 |
| 203   | CONN_STMT_ALLOC_ERROR                       | 达到最大语句数限制。                        |
| 204    | CONN_IN_USE                                  | 连接正被其他语句使用。                     |
| 205  | CONN_UNSUPPORTED_OPTION                       | 驱动不支持该连接选项。                       |
| 206    | CONN_INVALID_ARGUMENT_NO                     | 连接函数参数无效。                         |
| 207  | CONN_TRANSACT_IN_PROGRES                      | 存在进行中的事务。                        |
| 208    | CONN_NO_MEMORY_ERROR                          | 内存不足。                           |
| 209    | CONN_NOT_IMPLEMENTED_ERROR                   | 功能未实现。                          |
| 210  | CONN_INVALID_AUTHENTICATION                     | 认证失败，用户名或密码错误。                   |
| 211  | CONN_AUTH_TYPE_UNSUPPORTED                   | 服务器不支持该认证方式。                     |
| 212  | CONN_UNABLE_TO_LOAD_DLL                      | 无法加载驱动。                            |
| 213    | CONN_ILLEGAL_TRANSACT_STATE                   | 事务状态不一致。                         |
| 214   | CONN_VALUE_OUT_OF_RANGE                      | 参数值超出允许范围。                          |
| 215  | CONN_BUFFER_LENGTH_NEGATIVE                  | 缓冲区长度为负值。                          |
| 216   | CONN_OPTION_NOT_FOR_THE_DRIVER              | 选项不适用于当前驱动。                      |
| 217   | CONN_EXEC_ERROR                               | 连接执行SQL命令失败。                    |
   
#### 执行错误码
执行错误码用于描述SQL语句执行过程中的问题，包括语句语法错误、执行失败、参数绑定错误、游标状态错误等。可以在调用SQLGetDiagRec接口时，设置HandleType为SQL_HANDLE_STMT，并通过NativeErrorPtr参数获执行取错误码，具体请参见[表2 执行错误码]。
 表2执行错误码 
| 错误码 | 错误码名称                                | 典型场景                   |
|:---|:---|:---|
| -6  | STMT_ERROR_IN_ROW                   | 取多行时某行转换出错，跳过该行继续。     |
| -5    | STMT_OPTION_VALUE_CHANGED             | 设置选项时驱动自动调整了值。       |
| -4  | STMT_ROW_VERSION_CHANGED             | 取出的行被其他事务修改。           |
| -3    | STMT_POS_BEFORE_RECORDSET          | 游标定位在结果集之前。            |
| -2   | STMT_TRUNCATED                      | 数据被截断。                 |
| -1    | STMT_INFO_ONLY                      | 非错误，仅信息通知。             |
| 0    | STMT_OK                             | 操作成功。                 |
| 1   | STMT_EXEC_ERROR                      | SQL执行失败，可能是语法错误、违反约束等。 |
| 2     | STMT_STATUS_ERROR                    | 函数调用序列错误。              |
| 3     | STMT_SEQUENCE_ERROR                 | 前一操作未完成时发起新操作。        |
| 4   | STMT_NO_MEMORY_ERROR                 | 内存分配失败。                 |
| 5    | STMT_COLNUM_ERROR                   | 列号无效，小于1或超过列数。        |
| 6  | STMT_NO_STMTSTRING                 | 执行时未设置SQL文本。            |
| 7   | STMT_ERROR_TAKEN_FROM_BACKEND       | 后端返回错误，如违反约束。        |
| 8    | STMT_INTERNAL_ERROR                | 驱动内部错误。                |
| 9    | STMT_STILL_EXECUTING                | 异步操作仍在进行中。             |
| 10    | STMT_NOT_IMPLEMENTED_ERROR         | 功能未实现。               |
| 11  | STMT_BAD_PARAMETER_NUMBER_ERROR     | 绑定参数个数与占位符不匹配。        |
| 12  | STMT_OPTION_OUT_OF_RANGE_ERROR      | 选项值超出有效范围。            |
| 13    | STMT_INVALID_COLUMN_NUMBER_ERROR    | 列号无效。                    |
| 14  | STMT_RESTRICTED_DATA_TYPE_ERROR    | 不允许的数据类型转换。           |
| 15     | STMT_INVALID_CURSOR_STATE_ERROR   | 游标未打开时取数，或取数后又继续取数。     |
| 16   | STMT_CREATE_TABLE_ERROR              | 创建表执行失败。                |
| 17  | STMT_NO_CURSOR_NAME                  | 未设置游标名。               |
| 18   | STMT_INVALID_CURSOR_NAME           | 游标名无效。                  |
| 19   | STMT_INVALID_ARGUMENT_NO           | 参数编号无效。                 |
| 20    | STMT_ROW_OUT_OF_RANGE              | 请求的行号超出范围。             |
| 21   | STMT_OPERATION_CANCELLED             | 操作被取消。                  |
| 22    | STMT_INVALID_CURSOR_POSITION         | 游标定位无效。                  |
| 23 | STMT_VALUE_OUT_OF_RANGE           | 数值超出缓冲区范围。             |
| 24    | STMT_OPERATION_INVALID              | 当前状态下不允许该操作。          |
| 25    | STMT_PROGRAM_TYPE_OUT_OF_RANGE    | SQL数据类型标识无效。          |
| 26   | STMT_BAD_ERROR                      | 通用错误。                   |
| 27    | STMT_INVALID_OPTION_IDENTIFIER     | 选项标识符不存在。               |
| 28    | STMT_RETURN_NULL_WITHOUT_INDICATOR  | 值为NULL但无指示器。          |
| 29   | STMT_INVALID_DESCRIPTOR_IDENTIFIER | 描述符句柄无效。                |
| 30   | STMT_OPTION_NOT_FOR_THE_DRIVER     | 选项不适用于驱动。               |
| 31   | STMT_FETCH_OUT_OF_RANGE             | fetch位置超出结果集。          |
| 32   | STMT_COUNT_FIELD_INCORRECT        | 参数数量与占位符不匹配。           |
| 33  | STMT_INVALID_NULL_ARG                 | 不允许NULL的参数传入了NULL值。     |
| 34     | STMT_NO_RESPONSE                   | 服务器无响应。                |
| 35 | STMT_COMMUNICATION_ERROR             | 通信链路故障。                |
| 36   | STMT_STRING_CONVERSION_ERROR        | 字符集转换失败。                |
   
#### 描述符错误码
描述符错误码用于描述描述符操作的相关问题。例如当调用SQLSetDescField、SQLGetDescField、SQLCopyDesc等接口设置或获取描述符字段信息失败时，会设置该错误码。可以在调用SQLGetDiagRec接口时，设置HandleType为SQL_HANDLE_DESC，并通过NativeErrorPtr参数获取描述符错误码，具体请参见[表3 描述符错误码]。
 表3描述符错误码 
| 错误码 | 错误码名称                               | 典型场景             |
|:---|:---|:---|
| -2    | DESC_ERROR_IN_ROW                    | 取多行时某行描述符操作出错。  |
| -1  | DESC_OPTION_VALUE_CHANGED             | 获取描述符字段时值被自动调整。   |
| 0      | DESC_OK                              | 描述符操作成功。          |
| 1      | DESC_EXEC_ERROR                      | 描述符操作失败。           |
| 2   | DESC_STATUS_ERROR                    | 描述符调用序列错误。        |
| 3     | DESC_SEQUENCE_ERROR                  | 前一描述符操作未完成时发起新操作。 |
| 4    | DESC_NO_MEMORY_ERROR                | 描述符内存分配失败。        |
| 5   | DESC_COLNUM_ERROR                    | 描述符中列号无效。        |
| 6   | DESC_NO_STMTSTRING                   | 描述符关联的语句未设置SQL。   |
| 7    | DESC_ERROR_TAKEN_FROM_BACKEND        | 后端错误记录到描述符。       |
| 8   | DESC_INTERNAL_ERROR                 | 描述符内部错误。         |
| 9    | DESC_STILL_EXECUTING               | 异步操作时操作描述符。       |
| 10 | DESC_NOT_IMPLEMENTED_ERROR           | 描述符功能未实现。         |
| 11   | DESC_BAD_PARAMETER_NUMBER_ERROR       | 描述符参数数量与SQL不匹配。   |
| 12  | DESC_OPTION_OUT_OF_RANGE_ERROR       | 描述符字段值超出范围。       |
| 13    | DESC_INVALID_COLUMN_NUMBER_ERROR    | 描述符列号无效。          |
| 14    | DESC_RESTRICTED_DATA_TYPE_ERROR      | 描述符数据类型不允许转换。     |
| 15  | DESC_INVALID_CURSOR_STATE_ERROR      | 游标状态不允许描述符操作。     |
| 16    | DESC_CREATE_TABLE_ERROR               | 通过描述符创建表失败。       |
| 17   | DESC_NO_CURSOR_NAME                 | 描述符关联语句未设置游标名。     |
| 18    | DESC_INVALID_CURSOR_NAME            | 描述符游标名无效。        |
| 19    | DESC_INVALID_ARGUMENT_NO              | 描述符字段编号无效。        |
| 20   | DESC_ROW_OUT_OF_RANGE                | 描述符行号超出范围。      |
| 21  | DESC_OPERATION_CANCELLED              | 描述符操作被取消。         |
| 22   | DESC_INVALID_CURSOR_POSITION         | 描述符游标定位无效。      |
| 23   | DESC_VALUE_OUT_OF_RANGE            | 描述符数据值超出范围。      |
| 24    | DESC_OPERATION_INVALID               | 当前状态下描述符操作不允许。   |
| 25  | DESC_PROGRAM_TYPE_OUT_OF_RANGE      | 描述符程序类型标识无效。      |
| 26   | DESC_BAD_ERROR                       | 描述符通用错误。         |
| 27    | DESC_INVALID_OPTION_IDENTIFIER      | 描述符选项标识无效。       |
| 28    | DESC_RETURN_NULL_WITHOUT_INDICATOR | 描述符返回NULL但无指示器。   |
| 29   | DESC_INVALID_DESCRIPTOR_IDENTIFIER    | 描述符句柄无效或已释放。      |
| 30   | DESC_OPTION_NOT_FOR_THE_DRIVER      | 描述符选项不适用驱动。       |
| 31  | DESC_FETCH_OUT_OF_RANGE             | 描述符fetch位置超出范围。    |
| 32  | DESC_COUNT_FIELD_INCORRECT           | 描述符计数字段与实际不匹配。   |
   
