从 SQL 到 C:二进制
二进制 ODBC SQL 数据类型的标识符为:
SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY
下表显示了二进制 SQL 数据可转换为的 ODBC C 数据类型。 有关表中的列和术语的说明,请参阅 将数据从 SQL 转换为 C 数据类型。
C 类型标识符 | 测试 | *TargetValuePtr | *StrLen_or_IndPtr | SQLSTATE |
---|---|---|---|---|
SQL_C_CHAR | () * 2 <BufferLength 的数据字节长度 (字节长度的数据) * 2 >= BufferLength |
数据 截断的数据 |
数据长度(以字节为单位) 数据长度(以字节为单位) |
不适用 01004 |
SQL_C_WCHAR | () * 2 <BufferLength 的数据的字符长度 () * 2 >= BufferLength 的字符长度 |
数据 截断的数据 |
数据长度(以字符为单位) 数据长度(以字符为单位) |
不适用 01004 |
SQL_C_BINARY | 数据的 <字节长度 = BufferLength 数据 >BufferLength 的字节长度 |
数据 截断的数据 |
数据长度(以字节为单位) 数据长度(以字节为单位) |
不适用 01004 |
将二进制 SQL 数据转换为字符 C 数据时,源数据的每个字节 (8 位) 表示为两个 ASCII 字符。 这些字符是十六进制形式的数字的 ASCII 字符表示形式。 例如,二进制00000001转换为“01”,二进制11111111转换为“FF”。
驱动程序始终将单个字节转换为十六进制数字对,并使用 null 字节终止字符串。 因此,如果 BufferLength 为偶数且小于转换后的数据的长度,则不使用 *TargetValuePtr 缓冲区的最后一个字节。 (转换的数据需要偶数个字节,下一个字节为 null 字节,不能使用最后一个字节。)
注意
不建议应用程序开发人员将二进制 SQL 数据绑定到字符 C 数据类型。 这种转换通常效率低下且速度缓慢。