[输入]语句句柄。
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_NEED_DATA、SQL_STILL_EXECUTING、SQL_ERROR、SQL_NO_DATA、SQL_INVALID_HANDLE或SQL_PARAM_DATA_AVAILABLE。
当
SQLExecute
返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时,可以通过使用 handleType
of SQL_HANDLE_STMT 和
StatementHandle
句柄
调用
SQLGetDiagRec
来获取关联的 SQLSTATE 值。 下表列出了 SQLExecute
通常返回
的 SQLSTATE 值,并解释此函数上下文中的每个值;表示法“(DM)”位于驱动程序管理器返回的 SQLSTATE 的说明之前。 除非另有说明,否则与每个 SQLSTATE 值关联的返回代码SQL_ERROR。
SQLSTATE
01001
游标操作冲突
与
StatementHandle
关联的已准备语句包含定位的更新或删除语句,并且未更新或删除行或多行。 (有关多行更新的详细信息,请参阅SQL_ATTR_SIMULATE_CURSOR
的说明SQLSetStmtAttr
中的
属性
。
(函数返回SQL_SUCCESS_WITH_INFO。)
01003
在 set 函数中消除 NULL 值
与 StatementHandle
关联的已准备语句包含一个集函数(如
AVG
、
MAX
、
MIN
等),但在应用函数之前未
消除 COUNT
集函数和 NULL 参数值。
(函数返回SQL_SUCCESS_WITH_INFO。)
01004
字符串数据,右截断
为输出参数返回的字符串或二进制数据导致非空字符或非 NULL 二进制数据的截断。 如果它是字符串值,则将其右截断。 (函数返回SQL_SUCCESS_WITH_INFO。)
01006
权限未撤销
与
StatementHandle
关联的已准备语句是
REVOKE
语句,并且用户没有指定的权限。 (函数返回SQL_SUCCESS_WITH_INFO。)
01007
未授予权限
与
StatementHandle
关联的已准备语句是
GRANT
语句,并且无法向用户授予指定的特权。
01S02
选项值已更改
由于实现工作条件,指定的语句属性无效,因此暂时替换了类似的值。 (
可以调用 SQLGetStmtAttr
来确定临时替换的值。替换值对
StatementHandle
有效,直到游标关闭,此时语句属性将还原为其以前的值。 可以更改的语句属性包括:SQL_ATTR_CONCURRENCY、SQL_ATTR_CURSOR_TYPE、SQL_ATTR_KEYSET_SIZE、SQL_ATTR_MAX_LENGTH、SQL_ATTR_MAX_ROWS、SQL_ATTR_QUERY_TIMEOUT 和SQL_ATTR_SIMULATE_CURSOR。 (函数返回SQL_SUCCESS_WITH_INFO。)
01S07
输入/输出或输出参数返回的数据被截断,以便截断数值数据类型的小数部分或时间、时间戳或间隔数据类型的时间部分的小数部分。
(函数返回SQL_SUCCESS_WITH_INFO。)
07002
COUNT 字段不正确
SQLBindParameter
中指定的
参数数小于 *
StatementText
中包含的 SQL 语句中的参数数。
使用 ParameterValuePtr 设置为 null 指针调用 SQLBindParameter,StrLen_or_IndPtr
未设置为SQL_NULL_DATA或SQL_DATA_AT_EXEC,
并且 InputOutputType
未设置为SQL_PARAM_OUTPUT,以便 SQLBindParameter
中指定的
参数数大于 *
StatementText
中包含的 SQL 语句中的参数数。
07006
受限数据类型属性冲突
无法
将绑定参数的
ValueType
参数标识的数据值转换为 SQLBindParameter
中的
ParameterType
参数标识
的数据类型。
无法将绑定为 SQL_PARAM_INPUT_OUTPUT 或 SQL_PARAM_OUTPUT 的参数返回的数据值转换为 SQLBindParameter
中
ValueType
参数标识
的数据类型。
(如果无法转换一个或多个行的数据值,但成功返回了一行或多行,则此函数返回SQL_SUCCESS_WITH_INFO。
07007
受限参数值冲突
参数类型SQL_PARAM_INPUT_OUTPUT_STREAM仅用于在部件中发送和接收数据的参数。 此参数类型不允许输入绑定缓冲区。
当参数类型SQL_PARAM_INPUT_OUTPUT且 SQLBindParameter
中指定的
*
StrLen_or_IndPtr
不等于 SQL_NULL_DATA、SQL_DEFAULT_PARAM、SQL_LEN_DATA_AT_EXEC(len) 或SQL_DATA_AT_EXEC时,将发生此错误。
07S01
默认参数的使用无效
使用
SQLBindParameter
设置的参数值SQL_DEFAULT_PARAM,并且相应的参数不是 ODBC 规范过程调用的参数。
08S01
通信链接失败
驱动程序与驱动程序连接到的数据源之间的通信链接在函数完成处理之前失败。
21S02
派生表的程度与列列表不匹配
与
StatementHandle
关联的已准备语句包含 CREATE
VIEW
语句,以及非限定列列表(为 SQL 语句的列标识符
参数中
视图指定的列数)包含的名称多于由
SQL 语句的查询规范
参数定义的派生表中的列数。
22001
字符串数据,右截断
将字符或二进制值赋值给列导致非空(字符)或非 null(二进制)字符或字节的截断。
22002
指示符变量是必需的,但未提供
NULL 数据绑定到由 SQLBindParameter
设置
StrLen_or_IndPtr
为 null 指针的输出参数
。
22003
数值范围之外
与
StatementHandle
关联的已准备语句包含绑定的数值参数,参数值在分配给关联的表列时导致数字的整个(而不是小数部分)被截断。
返回一个或多个输入/输出或输出参数的数值(作为数字或字符串),会导致截断数字的整个(而不是小数部分)。
22007
日期/时间格式无效
与
StatementHandle
关联的已准备语句包含一个 SQL 语句,该语句包含日期、时间或时间戳结构作为绑定参数,参数分别是无效的日期、时间或时间戳。
输入/输出或输出参数绑定到日期、时间或时间戳 C 结构,返回的参数中的值分别为无效的日期、时间或时间戳。 (函数返回SQL_SUCCESS_WITH_INFO。)
22008
日期/时间字段溢出
与
StatementHandle
关联的已准备语句包含一个 SQL 语句,该语句包含一个日期/时间表达式,在计算时导致日期、时间或时间戳结构无效。
为输入/输出或输出参数计算的日期/时间表达式导致日期、时间或时间戳 C 结构无效。
22012
与
StatementHandle
关联的已准备语句包含一个算术表达式,该表达式导致除以零。
为输入/输出或输出参数计算的算术表达式,结果除以零。
22015
间隔字段溢出
*StatementText
包含一个确切的数字或间隔参数,当转换为间隔 SQL 数据类型时,导致有效数字丢失。
*StatementText
包含一个包含多个字段的间隔参数,当转换为列中的数字数据类型时,该参数在数值数据类型中没有表示形式。
*StatementText
包含分配给间隔 SQL 类型的参数数据,并且间隔 SQL 类型中没有 C 类型的值表示形式。
将精确数字或间隔 SQL 类型的输入/输出参数分配给间隔 C 类型会导致有效数字丢失。
将输入/输出或输出参数分配给间隔 C 结构时,间隔数据结构中没有数据的表示形式。
22018
强制转换规范的字符值无效
*StatementText
包含的 C 类型是精确或近似数字、日期/时间或间隔数据类型;列的 SQL 类型是字符数据类型;列中的值不是绑定 C 类型的有效文本。
返回输入/输出或输出参数时,SQL 类型是精确或近似数字、日期/时间或间隔数据类型;C 类型SQL_C_CHAR;和列中的值不是绑定 SQL 类型的有效文本。
22019
转义字符无效
与
StatementHandle
关联的已准备语句在
WHERE
子句中包含
ESCAPE 的
LIKE
谓词,而 ESCAPE
后面的
转义
字符长度不等于 1。
22025
无效转义序列
与 StatementHandle
关联的已准备语句在 WHERE
子句中包含
“
LIKE
模式值
ESCAPE 转义字符
”,并且模式值中的转义
字符后面的字符不是“%”或“_”之一。
23000
完整性约束冲突
与
StatementHandle
关联的已准备语句包含一个参数。 参数值是关联表列中定义为 NOT NULL 的列的 NULL,为约束仅包含唯一值的列提供了重复值,或者违反了其他一些完整性约束。
24000
游标状态无效
游标位于 SQLFetch
或
SQLFetchScroll
的
StatementHandle
上。 如果
SQLFetch 或
SQLFetchScroll 未返回SQL_NO_DATA,并且如果
SQLFetch
或
SQLFetchScroll
返回SQL_NO_DATA,驱动程序将返回此错误。
游标在 StatementHandle
上
打开。
与
StatementHandle
关联的已准备语句包含一个定位的更新或删除语句,游标位于结果集的开头或结果集末尾之后。
40001
序列化失败
由于资源死锁与另一个事务,事务已回滚。
40003
语句完成未知
执行此函数期间关联的连接失败,无法确定事务的状态。
42000
语法错误或访问冲突
用户无权执行与
StatementHandle
关联的已准备语句。
44000
WITH CHECK OPTION 冲突
与
StatementHandle
关联的已准备语句包含
对已查看表或派生自通过指定
WITH CHECK OPTION
创建的表的 INSERT
语句,这样,受 INSERT
语句影响的
一行或多行将不再存在于查看表中。
与
StatementHandle
关联的已准备语句包含
对已查看表或派生自通过指定
WITH CHECK OPTION
创建的表的 UPDATE
语句,这样,受 UPDATE
语句影响的
一行或多行将不再存在于视图表中。
HY000
发生错误:没有特定的 SQLSTATE,也没有定义特定于实现的 SQLSTATE。 *MessageText
缓冲区中
SQLGetDiagRec
返回
的错误消息描述错误及其原因。
HY001
内存分配错误
驱动程序无法分配支持执行或完成函数所需的内存。
HY008
操作已取消
为
StatementHandle
启用了异步处理。 调用了该函数,在完成执行之前,
对 StatementHandle 调用
了 SQLCancel 或
SQLCancelHandle
。 然后,在 StatementHandle
上
再次调用该函数。
调用了函数,在完成执行之前,SQLCancel 或
SQLCancelHandle
从多线程应用程序中的不同线程调用
StatementHandle
。
HY010
函数序列错误
(DM) 为与
StatementHandle
关联的连接句柄调用异步执行函数。 调用 SQLExecute
函数时,
此异步函数仍在执行。
(DM)
为 StatementHandle
调用
了 SQLExecute
、
SQLExecDirect
或
SQLMoreResults
,并返回了SQL_PARAM_DATA_AVAILABLE。 在检索所有流式处理参数的数据之前调用此函数。
(DM) 为
StatementHandle
调用异步执行函数(而不是此函数),并在调用此函数时仍在执行。
(DM)
为 StatementHandle
调用
了 SQLExecute
、
SQLExecDirect
、
SQLBulkOperations
或
SQLSetPos
,并返回了SQL_NEED_DATA。 在为所有数据执行参数或列发送数据之前调用此函数。
(DM)
StatementHandle
尚未准备好。
HY013
内存管理错误
无法处理函数调用,因为基础内存对象无法访问,可能是因为内存条件低。
HY090
字符串或缓冲区长度无效
使用
SQLBindParameter
设置的参数值是空指针,参数长度值不是 0、SQL_NULL_DATA、SQL_DATA_AT_EXEC、SQL_DEFAULT_PARAM或小于或等于SQL_LEN_DATA_AT_EXEC_OFFSET。
使用
SQLBindParameter
设置的参数值不是空指针;C 数据类型SQL_C_BINARY或SQL_C_CHAR;参数长度值小于 0,但未SQL_NTS、SQL_NULL_DATA、SQL_DEFAULT_PARAM或SQL_DATA_AT_EXEC,或小于或等于SQL_LEN_DATA_AT_EXEC_OFFSET。
SQLBindParameter
绑定的参数长度值设置为SQL_DATA_AT_EXEC;SQL 类型是SQL_LONGVARCHAR、SQL_LONGVARBINARY或特定于数据源的长数据类型;SQLGetInfo
中的
SQL_NEED_LONG_DATA_LEN信息类型为“Y”。
HY105
参数类型无效
为 SQLBindParameter
中的
参数
InputOutputType
指定的值SQL_PARAM_OUTPUT,参数是输入参数。
HY109
光标位置无效
准备的语句是一个定位的更新或删除语句,游标位于已删除或无法提取的行上(由
SQLSetPos
或
SQLFetchScroll
)。
HY117
连接因未知事务状态而挂起。 仅允许断开连接和只读函数。
(DM) 有关挂起状态的详细信息,请参阅
SQLEndTran 函数
。
HYC00
未实现可选功能
驱动程序或数据源不支持SQL_ATTR_CONCURRENCY和SQL_ATTR_CURSOR_TYPE语句属性的当前设置的组合。
SQL_ATTR_USE_BOOKMARKS语句属性设置为SQL_UB_VARIABLE,SQL_ATTR_CURSOR_TYPE语句属性设置为驱动程序不支持书签的游标类型。
HYT00
在数据源返回结果集之前,查询超时期限已过期。 超时期限通过
SQLSetStmtAttr
设置,SQL_ATTR_QUERY_TIMEOUT。
HYT01
超过连接超时时间
在数据源响应请求之前,连接超时期限已过期。 连接超时期限通过
SQLSetConnectAttr
设置,SQL_ATTR_CONNECTION_TIMEOUT。
IM001
驱动程序不支持此函数
(DM) 与
StatementHandle
关联的驱动程序不支持该函数。
IM017
在异步通知模式下禁用轮询
每当使用通知模型时,轮询将被禁用。
IM018
尚未调用 SQLCompleteAsync
来完成此句柄上的上一个异步操作。
如果句柄上的上一个函数调用返回SQL_STILL_EXECUTING并且启用通知模式,
则必须在句柄上调用 SQLCompleteAsync
才能执行后期处理并完成操作。
SQLExecute
可以根据数据源评估与该语句关联的 SQL 语句时返回 SQLPrepare
可以返回
的任何 SQLSTATE。
SQLExecute
执行 SQLPrepare
准备的
语句。 应用程序处理或放弃对 SQLExecute 的调用
的结果后,应用程序可以使用新的参数值再次调用
SQLExecute
。
有关准备的执行的详细信息,请参阅
“准备执行
”。
若要多次执行
SELECT
语句,应用程序必须在重新执行
SELECT
语句之前调用
SQLCloseCursor
。
如果数据源处于手动提交模式(需要显式事务启动),并且尚未启动事务,驱动程序会在发送 SQL 语句之前启动事务。 有关详细信息,请参阅
事务
。
如果应用程序使用
SQLPrepare
准备和
SQLExecute
提交
COMMIT
或
ROLLBACK
语句,则它不会在 DBMS 产品之间互操作。 若要提交或回滚事务,请调用
SQLEndTran
。
如果
SQLExecute
遇到执行时的数据参数,它将返回SQL_NEED_DATA。 应用程序使用
SQLParamData
和
SQLPutData
发送数据。 请参阅
SQLBindParameter
、
SQLParamData
、
SQLPutData
和
发送长数据
。
如果
SQLExecute
执行搜索的更新、插入或删除语句,而该语句不会影响数据源中的任何行,则对 SQLExecute
的调用
将返回SQL_NO_DATA。
如果 SQL_ATTR_PARAMSET_SIZE 语句属性的值大于 1,并且 SQL 语句包含至少一个参数标记,
则 SQLExecute
将为调用
SQLBindParameter
时由 *ParameterValuePtr
参数指向
的数组中的每个参数值执行一次 SQL 语句。 有关详细信息,请参阅
参数值的
数组。
如果启用了书签并执行不支持书签的查询,驱动程序应尝试通过更改属性值并返回 SQLSTATE 01S02(选项值已更改)将环境强制转换为支持书签的环境。 如果无法更改属性,驱动程序应返回 SQLSTATE HY024(属性值无效)。
使用连接池时,应用程序不得执行更改数据库或数据库的上下文的 SQL 语句,例如
SQL Server 中的 USE
数据库
语句,这会更改数据源使用的目录。
请参阅
SQLBindParameter
、
SQLBulkOperations
、
SQLPutData
和
SQLSetPos
。
有关以下内容的信息