从 C 到 SQL:数字

数字 ODBC C 数据类型的标识符为:

SQL_C_STINYINT

SQL_C_SLONG

SQL_C_UTINYINT

SQL_C_ULONG

SQL_C_TINYINT

SQL_C_LONG

SQL_C_SSHORT

SQL_C_FLOAT

SQL_C_USHORT

SQL_C_DOUBLE

SQL_C_SHORT

SQL_C_NUMERIC

SQL_C_SBIGINT

SQL_C_UBIGINT

下表显示了可将数值 C 数据转换为的 ODBC SQL 数据类型。 有关表中列和术语的说明,请参阅 将数据从 C 转换为 SQL 数据类型

SQL 类型标识符 测试 SQLSTATE
SQL_CHAR

SQL_VARCHAR

SQL_LONGVARCHAR
位数 <= 列字节长度

位数 > 列字节长度
不适用

22001
SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR
字符 <数 = 列字符长度

字符 > 数 列字符长度
不适用

22001
SQL_DECIMAL[b]

SQL_NUMERIC[b]

SQL_TINYINT[b]

SQL_SMALLINT[b]

SQL_INTEGER[b]

SQL_BIGINT[b]
在不截断或截断小数位数的情况下转换的数据

使用截断整位数转换的数据
不适用

22003
SQL_REAL

SQL_FLOAT

SQL_DOUBLE
数据在数字要转换为的数据类型范围内

数据超出了数字要转换为的数据类型的范围
不适用

22003
SQL_BIT 数据为 0 或 1

数据大于 0、小于 2 且不等于 1

数据小于 0 或大于或等于 2
不适用

22001

22003
SQL_INTERVAL_YEAR[a]

SQL_INTERVAL_MONTH[a]

SQL_INTERVAL_DAY[a]

SQL_INTERVAL_HOUR[a]

SQL_INTERVAL_MINUTE[a]

SQL_INTERVAL_SECOND[a]
数据未截断。

数据截断。
不适用

22015

[a] 这些转换仅支持确切的数值数据类型 (SQL_C_STINYINT、SQL_C_UTINYINT、SQL_C_SSHORT、SQL_C_USHORT、SQL_C_SLONG、SQL_C_ULONG或SQL_C_NUMERIC) 。 (SQL_C_FLOAT或SQL_C_DOUBLE) 的近似数值数据类型不支持它们。 精确数值 C 数据类型不能转换为间隔精度不是单个字段的间隔 SQL 类型。

[b] 对于“n/a”情况,当存在小数截断时,驱动程序可以选择返回 SQL_SUCCESS_WITH_INFO 和 01S07。

驱动程序在从数值 C 数据类型转换数据时忽略长度/指示器值,并假定数据缓冲区的大小是数值 C 数据类型的大小。 长度/指示器值在 SQLPutData 中的 StrLen_or_Ind 参数中传递,并使用 SQLBindParameter 中的 StrLen_or_IndPtr 参数指定的缓冲区中传递。 数据缓冲区是使用 SQLPutData 中的 DataPtr 参数和 SQLBindParameter 中的 ParameterValuePtr 参数指定的。