使用 SQLPutData 发送超过 65,535 字节的数据(对于 SQL Server 版本 4.21a)或 400 KB 的数据(对于 SQL Server 版本 6.0 及更高版本)(对于SQL_LONGVARCHAR()、SQL_WLONGVARCHAR(textntext) 或 SQL_LONGVARBINARY (image) 列时,适用以下限制:
引用的参数可以是 INSERT 语句中的insert_value 。
引用的参数可以是 UPDATE 语句的 SET 子句中的表达式 。
使用版本 6.5 或更早版本时,取消向运行 SQL Server 的服务器提供块中的数据的 SQLPutData 调用会导致列值的部分更新。 调用 SQLCancel 时引用的text列ntextimage设置为中间占位符值。
注释
SQL Server Native Client ODBC 驱动程序不支持连接到 SQL Server 版本 6.5 及更早版本。
诊断
SQLPutData 有一个特定于 SQL Server Native Client 的 SQLSTATE:
| SQLSTATE | 错误 | DESCRIPTION |
|---|---|---|
| 22026 | 字符串数据,长度不匹配 | 例如,如果应用程序指定了要发送的数据长度(以字节为单位),其中 SQL_LEN_DATA_AT_EXEC n 大于 0,则应用程序通过 SQLPutData 提供的字节总数必须与指定的长度匹配。 |
SQLPutData 和表值参数
将变量行绑定与表值参数结合使用时,应用程序将使用 SQLPutData。 StrLen_Or_Ind参数指示驱动程序已准备好为下一行或表值参数数据的行收集数据,或者没有更多行可用:
大于 0 的值指示可以使用下一组行值。
0 值指示已没有更多的行要发送。
任何小于 0 的值都是错误,导致诊断记录与 SQLState HY090 和混乱“字符串或缓冲区长度无效”。
DataPtr 参数将被忽略,但必须设置为非 NULL 值。 有关详细信息,请参阅表值参数和列值的绑定和数据传输中的变量 TVP 行绑定部分。
如果 StrLen_Or_Ind 除SQL_DEFAULT_PARAM值之外的任何值或介于 0 和 SQL_PARAMSET_SIZE之间的数字(即 SQLBindParameter 的 ColumnSize 参数),则为错误。 此错误导致 SQLPutData 返回 SQL_ERROR:SQLSTATE=HY090,“字符串或缓冲区长度无效”。
有关表值参数的详细信息,请参阅表值参数(ODBC)。
SQLPutData 对增强的日期和时间功能的支持
日期/时间类型的参数值将按照从 C 到 SQL 的转换中所述进行转换。
有关详细信息,请参阅日期和时间改进(ODBC)。
SQLPutData 对大型 CLR UDT 的支持
SQLPutData 支持大型 CLR 用户定义的类型(UDT)。 有关详细信息,请参阅大型 CLR 用户定义的类型(ODBC)。