SQLPutData

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics 平台系统(PDW)

使用 SQLPutData 发送超过 65,535 字节的数据(对于 SQL Server 版本 4.21a)或 400 KB 的数据(对于 SQL Server 版本 6.0 及更高版本),用于SQL_LONGVARCHAR(文本)、SQL_WLONGVARCHAR(ntext)或SQL_LONGVARBINARY(图像)列时,适用以下限制:

  • 引用的参数可以是 INSERT 语句中的insert_value

  • 引用的参数可以是 UPDATE 语句的 SET 子句中的表达式

使用版本 6.5 或更早版本时,取消向运行 SQL Server 的服务器提供块中的数据的 SQLPutData 调用会导致列值的部分更新。 调用 SQLCancel 时引用的文本ntext图像列设置为中间占位符值。

注意

SQL Server Native Client ODBC 驱动程序不支持连接到 SQL Server 版本 6.5 及更早版本。

诊断

SQLPutData 有一个特定于 SQL Server Native Client 的 SQLSTATE:

SQLSTATE 错误 说明
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)。

另请参阅

SQLPutData 函数
ODBC API 实现细节