设置参数值

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

如果在对 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)

数据类型
变量 (C)

数据类型


绑定

变量


长度/指示器

缓冲区[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(SQL 的 C 字符类型) 10\0[a] SQL_NTS或 2
下午 1 点 SQL_TYPE_TIME SQL_C_TYPE_TIME 13,0,0[b] --
下午 1 点 SQL_TYPE_TIME (SQL时间类型) 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 语句,然后再将语句发送到数据源。