SQLPutData

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

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

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

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

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

注意

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 值。 有关详细信息,请参阅 Table-Valued参数和列值的绑定和数据传输中的可变 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 User-Defined类型 (ODBC)

另请参阅

SQLPutData 函数
ODBC API 实现细节