SQLPutData
使用 SQLPutData 发送 65,535 字节以上的数据(对于 SQL Server 版本 4.21a)或发送 400 KB 以上的数据(对于 SQL Server 6.0 和更高版本)时,SQL_LONGVARCHAR (text)、SQL_WLONGVARCHAR (ntext) 或 SQL_LONGVARBINARY (image) 列受以下限制:
引用的参数可以是 INSERT 语句中的 insert_value。
引用的参数可以是 UPDATE 语句的 SET 子句中的 expression。
在使用 6.5 或更低版本时,如果取消为运行 SQL Server 的服务器提供数据块的一系列 SQLPutData 调用,将导致部分更新列的值。调用 SQLCancel 时引用的 text、ntext 或 image 列则被设置为中间占位符值。
注意 |
---|
SQL Server Native Client ODBC 驱动程序不支持连接到 SQL Server 6.5 版和更低版本。 |
诊断
对于 SQLPutData: 有一个特定于 SQL Server Native Client 的 SQLSTATE
SQLSTATE |
错误 |
说明 |
---|---|---|
22026 |
字符串数据,长度不匹配 |
如果应用程序已指定要发送的以字节为单位的数据长度,例如使用 SQL_LEN_DATA_AT_EXEC(n),其中 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)。