C 数据类型

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

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

C 数据类型在 sqlBindCol 中指定,并使用 TargetType 参数和 SQLBindParameter 函数和 ValueType 参数在 SQLGetData 函数中指定。 还可以通过调用 SQLSetDescField 来指定它以设置 ARD 或 APD 的SQL_DESC_CONCISE_TYPE字段, 或者,通过使用 类型 参数(如果需要)和 描述符Handle 参数设置为 ARD 或 APD 的句柄调用 SQLSetDescRec(以及 SubType 参数)。

下表列出了 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
SQL_C_DOUBLE SQLDOUBLE、SQLFLOAT
SQL_C_BIT SQLCHAR unsigned char
SQL_C_STINYINT[j] SQLSCHAR 带符号字符
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] 日期/时间 C 数据类型中的年、月、日、小时、分钟和秒字段的值必须符合公历的约束。 (请参阅本附录后面的 公历 约束。

[b] 分数字段的值是秒数的十亿分之一,范围为 0 到 999,999,999(1 小于 10 亿)。 例如,半秒的分数字段值为 500,000,000,000,000 秒(1 毫秒)为 1,000,000 秒(1 毫秒),秒(一微秒)为 1,000,10 亿秒(1 纳秒) 为 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 字段中。 例如,数字 10.001 base 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时,它将使用自己的特定于驱动程序的默认值作为 精度 字段的值,并将在应用程序描述符(默认为 0)的SQL_DESC_SCALE字段中的值用于 刻度 字段。 应用程序可以通过设置应用程序描述符的SQL_DESC_PRECISION和SQL_DESC_SCALE字段来提供自己的精度和缩放值。

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

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

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

[j] _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 数据类型