- 概述
KingbaseES ODBC 是纯C的 ODBC 驱动程序,它支持 Microsoft ODBC 3.0 标准。通过 KingbaseES ODBC Driver,应用程序可以完成与数据库的连接、执行SQL语句、从数据库中获取结果、获取状态及错误信息、终止事务和连接等操作。
在本章中详细说明了 KingbaseES 对 ODBC 3.0 的标准接口函数、函数参数、参数选项的支持情况,以及使用时应该注意的问题。
- ODBC特性支持限制
KingbaseES 对 ODBC 3.0 的支持是有限制的,本节将从系统边界值等方面描述这些限制。
2.1. 系统边界值
表1 系统边界值
系统特性 最小值 最大值
ODBC每个环境句柄的连接数 0 128
2.2. 其他限制 - SQLBindCol
具体的列中的类型可以转化为C数据类型,参见表2.2.1。 - SQLBindParameter
支持从C数据类型往SQL数据类型的转化,参见表2。
列类型与SQL语句类型的对应关系参见表3。 - SQLGetData
具体的列中的类型可以转化为C数据类型,参见表1。 - BLOB
BLOB 数据类型可以通过编程方式插入(见示例程序2),也可以通过调用 SQL 语句 insert into [table name] values(1,X’41424344’) 进行插入。 - CLOB
与 BLOB 类似,CLOB 数据类型可以通过编程方式插入,也可以通过调用 SQL 语句 insert into [table name] values(1, ‘ABCD’) 进行插入。
2.2.1. 表中的列类型到C数据类型的转换表
调用 SQLBindCol 和 SQLGetData 时可以参照该表。
表中的列定义可以是下表最左一列中列出的12种类型, ODBC 的C数据类型可以是下表的 第一行所列的20种类型。
如果表定义为左边的某种类型,那么当调用 SQLGetData 或者 SQLBindCol 时 TargeType 参数只能是该数据类型对应的一行中填有 “Y” 的C数据类型。
例如,当表中的列定义为 date,那么调用 SQLGetData 或者 SQLBindCol 时 TargetType 参数就可以是 SQL_C_DEFAULT,SQL_C_CHAR,SQL_C_DATE,SQL_C_TIME,SQL_C_TIMESTAMP,而不能是 SQL_C_TINYINT。
表2 表中的列类型到C数据类型的转换表
表中的列定义 C数据类型
SQL_C_
DEFAULT SQL_C_
CHAR SQL_C_
TINYINT SQL_C_
UTINYINT SQL_C_
STINYINT SQL_C_
SHORT SQL_C_
USHORT SQL_C_
SSHORT SQL_C_
LONG SQL_C_
ULONG SQL_C_
SLONG SQL_C_
DOUBLE SQL_C_
SBIGINT SQL_C_
UBIGINT SQL_C_
FLOAT SQL_C_
BINARY SQL_C_
BIT SQL_C_
DATE SQL_C_
TIME SQL_C_
TIMESTAMP
BIGINT Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
INTEGER Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
SMALLINT Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
TINYINT Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
NUMERIC DECIMAL Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
FLOAT DOUBLE REAL Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
BIT Y Y
BYTEA BLOB Y Y
BOOL BOOLEAN INTERVAL Y Y Y Y Y
CHAR VARCHAR Y Y Y Y Y
TEXT CLOB Y Y
2.2.2. C数据类型到SQL数据类型的转换表
调用 SQLBindParameter 时可以参照该表。
ODBC 的C数据类型可以使用下表的第一行所列的18种类型,SQL 语句类型可以使用下表最左一列中列出的19种类型。
如果绑定参数的 ValueType为某种C数据类型,那么当调用 SQLBindParameter 时 ParameterType 参数只能是该C数据类型对应的一列中填有"Y"的 SQL 数据类型。
如果绑定参数的 ValueType为 SQL_C_CHAR,那么调用 SQLBindParameter 时 ParameterType 参数就可以是 SQL_CHAR,SQL_VARCHAR,SQL_LONGVARCHAR,而不能是 SQL_DECIMAL。
表3 C数据类型到SQL数据类型的转换表
表中的列定义 C数据类型
SQL_C_
DEFAULT SQL_C_
CHAR SQL_C_
TINYINT SQL_C_
UTINYINT SQL_C_
STINYINT SQL_C_
SHORT SQL_C_
USHORT SQL_C_
SSHORT SQL_C_
LONG SQL_C_
ULONG SQL_C_
SLONG SQL_C_
DOUBLE SQL_C_
SBIGINT SQL_C_
UBIGINT SQL_C_
FLOAT SQL_C_
BINARY SQL_C_
BIT SQL_C_
DATE SQL_C_
TIME SQL_C_
TIMESTAMP
SQL_CHAR Y Y Y Y Y
SQL_VARCHAR Y Y Y Y Y
SQL_LONGVARCHAR Y Y
SQL_DECIMAL Y Y Y Y Y Y Y Y Y Y Y Y Y Y
SQL_NUMERIC Y Y Y Y Y Y Y Y Y Y Y Y Y Y
SQL_BIT Y Y
SQL_TINYINT Y Y Y Y Y Y Y Y Y Y Y Y Y Y
SQL_SMALLINT Y Y Y Y Y Y Y Y Y Y Y Y Y Y
SQL_INTEGER Y Y Y Y Y Y Y Y Y Y Y Y Y
SQL_BIGINT Y Y Y Y Y Y Y Y Y Y Y Y Y Y
SQL_REAL Y Y Y Y Y Y Y Y Y Y Y Y Y Y
SQL_FLOAT Y Y Y Y Y Y Y Y Y Y Y Y Y Y
SQL_DOUBLE Y Y Y Y Y Y Y Y Y Y Y Y Y Y
SQL_BINARY Y Y
SQL_VARBINARY Y Y
SQL_LONGVARBINARY Y Y
SQL_TYPE_DATE Y Y Y Y
SQL_TYPE_TIME Y Y Y Y
SQL_TYPE_TIMESTAMP Y Y Y Y
2.2.3. 表中的列类型到SQL数据类型的映射表
下表列出了调用 SQLBindParameter时表中的列定义数据类型与SQL类型的对应关系:
表4 列类型到SQL数据类型的映射表
表中的列定义 可转化为如下SQL数据类型
BIGINT SQL_BIGINT
INTEGER SQL_INTEGER
SMALLINT SQL_SMALLINT
TINYINT SQL_TINYINT
DECIMAL NUMERIC SQL_DECIMAL, SQL_NUMERIC
REAL FLOAT DOUBLE SQL_REAL, SQL_FLOAT, SQL_DOUBLE
BYTEA SQL_BINARY, SQL_VARBINARY
BLOB SQL_LONGVARBINARY
BOOL BOOLEAN SQL_BIT
DATE TIME TIMESTAMP SQL_DATE, SQL_TIME, SQL_TIMESTAMP
CHAR VARCHAR TEXT SQL_CHAR, SQL_VARCHAR
CLOB SQL_LONGVARCHAR
当表中的数据类型定义为第一列的某种类型,那么当调用 SQLBindParameter 时,ParameterType 只能为其对应行中的第二列的值。如:表中的列类型为 INTEGER(INT),那么对应的 SQL 数据类型只能为 SQL_INTEGER,而不能为其它的 SQL 数据类型;否则,数据转化将会出错。