SQLPutData

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

  • 引用的参数可以是语句中的INSERTinsert_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 实现细节