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