SQLBindCol

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

一般情况下,请考虑使用 SQLBindCol 导致数据转换的影响。 绑定转换是客户端进程,所以,举例来说,检索绑定到字符列的浮点值将导致应用程序在提取行时执行浮点到字符的转换。 Transact-SQL CONVERT 函数可用于在服务器上放置数据转换的成本。

SQL Server 的实例可以在单个语句执行时返回多个结果行集。 每个结果集都必须单独绑定。 有关多个结果集绑定的详细信息,请参阅 SQLMoreResults

开发人员可以使用 TargetTypeSQL_C_BINARY将列绑定到特定于 SQL Server 的 C 数据类型。 绑定到 SQL Server 特定类型的列不可移植。 定义的特定于 SQL Server 的 ODBC C 数据类型与 DB 库的类型定义匹配,而移植应用程序的 DB 库开发人员可能需要利用此功能。

报告数据截断是 SQL Server Native Client ODBC 驱动程序的昂贵过程。 通过确保所有绑定数据缓冲区的宽度足以返回数据,可以避免截断。 对于字符数据,在使用字符串终止的默认驱动程序行为时,该宽度应该包括字符串终止符所占的空间。 例如,将 SQL Server char(5) 列绑定到五个字符的数组会导致提取的每个值截断。 将同一列绑定到六个字符的数组可以提供一个用于存储空终止符的字符元素,这样即避免了截断。 SQLGetData 可用于在不截断的情况下有效地检索长字符和二进制数据。

对于较大的值数据类型,如果用户提供的缓冲区不够大,无法容纳列的整个值, 则返回SQL_SUCCESS_WITH_INFO 并返回“字符串数据;发出右截断“警告。 StrLen_or_IndPtr参数将包含缓冲区中存储的字符/字节数。

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

日期/时间类型的结果列值将按照从 SQL 转换为 C 中所述进行转换。请注意,若要检索时间和 datetimeoffset 列作为相应的结构(SQL_SS_TIME2_STRUCTSQL_SS_TIMESTAMPOFF标准版T_STRUCT),必须将 TargetType 指定为SQL_C_DEFAULTSQL_C_BINARY

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

SQLBindCol 对大型 CLR UDT 的支持

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

另请参阅

SQLBindCol 函数
ODBC API 实现细节