设置参数值

若要设置参数的值,应用程序只需设置绑定到参数的变量的值。 设置此值的时间并不重要,只要在执行语句之前设置即可。 应用程序可以在绑定变量之前或之后设置该值,并且可以根据需要多次更改该值。 执行语句时,驱动程序只需检索变量的当前值。 当多次执行准备好的语句时,这一功能特别有用;每次执行语句时,应用程序都会为部分或全部变量设置新值。 有关此示例,请参阅本节前面的准备执行

如果在对 SQLBindParameter 的调用中绑定了长度/标记缓冲区,则必须在执行语句之前将其设置为以下值之一:

  • 绑定变量中数据的字节长度。 仅当变量为字符或二进制(ValueType 为 SQL_C_CHAR 或 SQL_C_BINARY)时,驱动程序才会检查此长度。

  • SQL_NTS。 数据是以 NULL 结尾的字符串。

  • SQL_NULL_DATA。 数据值为 NULL,驱动程序将忽略绑定变量的值。

  • SQL_DATA_AT_EXEC 或 SQL_LEN_DATA_AT_EXEC 宏的结果。 参数的值将使用 SQLPutData 发送。 有关详细信息,请参阅本节后面的发送长数据

下表显示了绑定变量的值以及应用程序为各种参数值设置的长度/标记缓冲区。

参数

value
参数

(SQL)

数据类型
Variable (C)

数据类型
Value in

bound

variable
Value in

length/indicator

buffer[d]
"ABC" SQL_CHAR SQL_C_CHAR ABC\0[a] SQL_NTS 或 3
10 SQL_INTEGER SQL_C_SLONG 10 --
10 SQL_INTEGER SQL_C_CHAR 10\0[a] SQL_NTS 或 2
1 P.M. SQL_TYPE_TIME SQL_C_TYPE_TIME 13,0,0[b] --
1 P.M. SQL_TYPE_TIME SQL_C_CHAR {t '13:00:00'}\0[a], [c] SQL_NTS 或 14
Null SQL_SMALLINT SQL_C_SSHORT -- SQL_NULL_DATA

[a] "\0" 表示 NULL 终止字符。 仅当长度/标记缓冲区中的值SQL_NTS时,才需要 NULL 终止字符。

[b] 此列表中的数字是 TIME_STRUCT 结构的字段中存储的数字。

[c] 字符串使用 ODBC 日期转义子句。 有关详细信息,请参阅日期、时间和时间戳文本

[d] 驱动程序必须始终检查此值,以查看它是否为特殊值,例如 SQL_NULL_DATA。

驱动程序在执行时对参数值执行的操作与驱动程序相关。 如有必要,驱动程序会将绑定变量的 C 数据类型和字节长度的值转换为参数的 SQL 数据类型、精准率和小数位数。 随后,在大多数情况下,驱动程序会将该值发送到数据源。 在某些情况下,它将值格式化为文本,并将其插入 SQL 语句,然后再将语句发送到数据源。