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)

SQLPutData 对增强的日期和时间功能的支持

日期/时间类型的参数值按由 C 转换为 SQL中所述进行转换。

有关详细信息,请参阅 日期/时间的改进 (ODBC)

SQLPutData 对大型 CLR UDT 的支持

SQLPutData 支持大型 CLR 用户定义类型 (UDT)。有关详细信息,请参阅大型 CLR 用户定义类型 (ODBC)

请参阅

概念

其他资源