从 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 参数指定的。