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