错误码说明
本章节对驱动内部错误码进行说明,用于协助开发者排查定位问题。典型场景仅为常见问题场景的简化描述,不能涵盖所有可能触发该错误码的场景。若典型场景的描述与实际遇到的情况不符,请以英文错误码名称的含义和实际的报错信息为准。
连接错误码
连接错误码用于描述与数据库服务器连接相关的问题,包括网络通信、认证、连接状态等。可以在调用SQLGetDiagRec接口时,设置HandleType为SQL_HANDLE_DBC,并通过NativeErrorPtr参数获取连接错误码,具体请参见表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 执行错误码。
| 错误码 | 错误码名称 | 典型场景 |
|---|---|---|
| -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 描述符错误码。
| 错误码 | 错误码名称 | 典型场景 |
|---|---|---|
| -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 | 描述符计数字段与实际不匹配。 |