一般情况下,请考虑使用 SQLBindCol 导致数据转换的影响。 绑定转换是客户端进程,因此,例如,检索绑定到字符列的浮点值会导致驱动程序在提取行时在本地执行浮点到字符转换。 Transact-SQL CONVERT 函数可用于在服务器上放置数据转换的成本。
SQL Server 的实例可以在单个语句执行时返回多个结果行集。 每个结果集必须单独绑定。 有关多个结果集绑定的详细信息,请参阅 SQLMoreResults。
开发人员可以使用 TargetType 值 SQL_C_BINARY将列绑定到 SQL Server 特定的 C 数据类型。 绑定到 SQL Server 特定类型的列不可移植。 定义的特定于 SQL Server 的 ODBC C 数据类型与 DB 库的类型定义匹配,并且 DB-Library 移植应用程序的开发人员可能需要利用此功能。
报告数据截断是 SQL Server Native Client ODBC 驱动程序的昂贵过程。 可以通过确保所有绑定的数据缓冲区足够宽来返回数据,从而避免截断。 对于字符数据,使用字符串终止的默认驱动程序行为时,宽度应包含字符串终止符的空间。 例如,将 SQL Server char(5) 列绑定到五个字符的数组会导致提取的每个值截断。 将同一列绑定到六个字符的数组可避免截断,方法是提供用于存储 null 终止符的字符元素。 SQLGetData 可用于在不截断的情况下有效地检索长字符和二进制数据。
对于较大的值数据类型,如果用户提供的缓冲区不够大,无法容纳列的整个值, SQL_SUCCESS_WITH_INFO 则返回“字符串数据;发出右截断“警告。 该 StrLen_or_IndPtr 参数将包含缓冲区中存储的字符数/字节数。
SQLBindCol 对增强的日期和时间功能的支持
日期/时间类型的结果列值将按照 从 SQL 转换为 C 中所述进行转换。请注意,若要检索时间和 datetimeoffset 列作为其相应的结构(SQL_SS_TIME2_STRUCT 和 SQL_SS_TIMESTAMPOFFSET_STRUCT), 必须将 TargetType 指定为 SQL_C_DEFAULT 或 SQL_C_BINARY。
有关详细信息,请参阅日期和时间改进(ODBC)。
SQLBindCol 对大型 CLR UDT 的支持
SQLBindCol 支持大型 CLR 用户定义类型(UDT)。 有关详细信息,请参阅大型 CLR 用户定义的类型(ODBC)。