C 数据类型

ODBC C 数据类型指示用于在应用程序中存储数据的 C 缓冲区的数据类型。

所有驱动程序都必须支持所有 C 数据类型。 这是必需的,因为所有驱动程序都必须支持其支持的 SQL 类型可转换为的所有 C 类型,并且所有驱动程序都支持至少一个字符 SQL 类型。 由于字符 SQL 类型可以转换为所有 C 类型,因此所有驱动程序都必须支持所有 C 类型。

C 数据类型在具有 TargetType 参数的 SQLBindColSQLGetData 函数中指定,在具有 ValueType 参数的 SQLBindParameter 函数中指定。 还可以通过调用 SQLSetDescField 来设置 ARD 或 APD 的SQL_DESC_CONCISE_TYPE字段,或者通过调用 SQLSetDescRec (如果需要)使用 Type 参数 (和 SubType 参数) 并将 DescriptorHandle 参数设置为 ARD 或 APD 的句柄来指定它。

下表列出了 C 数据类型的有效类型标识符。 该表还列出了对应于每个标识符的 ODBC C 数据类型以及此数据类型的定义。

C 类型标识符 ODBC C typedef C 类型
SQL_C_CHAR SQLCHAR * unsigned char *
SQL_C_WCHAR SQLWCHAR * wchar_t *
SQL_C_SSHORT[j] SQLSMALLINT short int
SQL_C_USHORT[j] SQLUSMALLINT unsigned short int
SQL_C_SLONG[j] SQLINTEGER long int
SQL_C_ULONG[j] SQLUINTEGER unsigned long int
SQL_C_FLOAT SQLREAL FLOAT
SQL_C_DOUBLE SQLDOUBLE、SQLFLOAT Double
SQL_C_BIT SQLCHAR unsigned char
SQL_C_STINYINT[j] SQLSCHAR signed char
SQL_C_UTINYINT[j] SQLCHAR unsigned char
SQL_C_SBIGINT SQLBIGINT _int64[h]
SQL_C_UBIGINT SQLUBIGINT unsigned _int64[h]
SQL_C_BINARY SQLCHAR * unsigned char *
SQL_C_BOOKMARK[i] 书签 unsigned long int[d]
SQL_C_VARBOOKMARK SQLCHAR * unsigned char *
所有 C 间隔数据类型 SQL_INTERVAL_STRUCT 请参阅本附录后面的 C 间隔结构 部分。

C 类型标识符 SQL_C_TYPE_DATE[c]

ODBC C typedef SQL_DATE_STRUCT

C 类型

struct tagDATE_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;    
} DATE_STRUCT;[a]  

C 类型标识符 SQL_C_TYPE_TIME[c]

ODBC C typedef SQL_TIME_STRUCT

C 类型

struct tagTIME_STRUCT {  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
} TIME_STRUCT;[a]  

C 类型标识符 SQL_C_TYPE_TIMESTAMP[c]

ODBC C typedef SQL_TIMESTAMP_STRUCT

C 类型

struct tagTIMESTAMP_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
   SQLUINTEGER fraction;[b]   
} TIMESTAMP_STRUCT;[a]  

C 类型标识符 SQL_C_NUMERIC

ODBC C typedef SQL_NUMERIC_STRUCT

C 类型

struct tagSQL_NUMERIC_STRUCT {  
   SQLCHAR precision;  
   SQLSCHAR scale;  
   SQLCHAR sign[g];  
   SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f]   
} SQL_NUMERIC_STRUCT;  

C 类型标识符 SQL_C_GUID

ODBC C typedef SQLGUID

C 类型

struct tagSQLGUID {  
   DWORD Data1;  
   WORD Data2;  
   WORD Data3;  
   BYTE Data4[8];  
} SQLGUID;[k]  

[a] datetime C 数据类型中的年、月、日、小时、分钟和秒字段的值必须符合公历的约束。 (请参阅本附录后面的 公历约束 。)

[b] 分数字段的值是十亿分之一秒的数值,范围为 0 到 999,999,999 (1 小于 10 亿) 。 例如,半秒的分数字段的值为 500,000,000, 对于千分之一秒 (一毫秒) 为 1,000,000,000,对于百万分之一秒 (1 微秒) 为 1,000,对于十亿分之一秒 (一纳秒) 为 1。

[c] 在 ODBC 2 中。x、C 日期、时间和时间戳数据类型SQL_C_DATE、SQL_C_TIME和SQL_C_TIMESTAMP。

[d] ODBC 3*.x* 应用程序应使用 SQL_C_VARBOOKMARK,而不是SQL_C_BOOKMARK。 当 ODBC 3*.x* 应用程序与 ODBC 2 配合使用时。x 驱动程序,ODBC 3*.x* 驱动程序管理器会将SQL_C_VARBOOKMARK映射到 SQL_C_BOOKMARK。

[e] 数字作为缩放整数存储在SQL_NUMERIC_STRUCT结构的 val 字段中,在小 endian 模式下, (最左侧的字节是最小有效字节) 。 例如,将数字 10.001 基数 10(刻度为 4)缩放为整数 100010。 由于这是十六进制格式的 186AA,因此SQL_NUMERIC_STRUCT中的值为“AA 86 01 00 00 ...00“,由SQL_MAX_NUMERIC_LEN #define定义的字节数。

有关 SQL_NUMERIC_STRUCT的详细信息,请参阅 HOWTO:使用SQL_NUMERIC_STRUCT检索数值数据

[f] SQL_C_NUMERIC数据类型的精度和缩放字段用于应用程序的输入和从驱动程序到应用程序的输出。 当驱动程序将数值写入SQL_NUMERIC_STRUCT时,它将使用自己特定于驱动程序的默认值作为 精度 字段的值,并且将使用应用程序描述符SQL_DESC_SCALE字段中的值, (缩放 字段的默认值为 0) 。 应用程序可以通过设置应用程序描述符的SQL_DESC_PRECISION和SQL_DESC_SCALE字段来提供自己的精度和缩放值。

[g] 如果正值,则符号字段为 1;如果为负值,则为 0。

[h] 某些编译器可能不提供_int64。

[i] ODBC 3*.x* 中已弃用_SQL_C_BOOKMARK。

[j] ODBC 中的_SQL_C_SHORT、SQL_C_LONG和SQL_C_TINYINT已替换为有符号和无符号类型:SQL_C_SSHORT和SQL_C_USHORT、SQL_C_SLONG和SQL_C_ULONG,以及SQL_C_STINYINT和SQL_C_UTINYINT。 应与 ODBC 2 配合使用的 ODBC 3*.x* 驱动程序。x 应用程序应支持SQL_C_SHORT、SQL_C_LONG和SQL_C_TINYINT,因为在调用它们时,驱动程序管理器会将它们传递给驱动程序。

[k] SQL_C_GUID只能转换为SQL_CHAR或SQL_WCHAR。

本部分包含下列主题。

另请参阅

ODBC 中的 C 数据类型