C语言访问INFORMIX数据库 — SQLDA结构
一、简要概述
C语言访问INFORMIX数据库的过程中,当不知道执行的查询语句所返回结果中有多少列,但又要提取查询结果数据时,此时必须使用INFORMIX提供SQLDA结构来达到数据信息提取的目的。现使用一篇来介绍SQLDA结构,先有一个大体的印象,后续章节会详细讲解SQLDA的使用。
二、结构定义
图1 SQLDA定义
三、结构说明
从图1中可以看出,SQLDA是一种由三个不同部分组成的可变长数据结构:
1)位于SQLDA开端的sqld用于标志该SQLDA描述了多少列的信息
2)而后是一个或多个sqlvar结构,用于标志列数据。
当用SQLDA把参数送到执行语句时,每一个参数都是一个sqlvar结构;当用SQLDA返回输出列信息时,每一列都是一个sqlvar结构。
3)第三部分是SQLDA结构的描述信息部分。下图为SQLDA各部分关系图示:
图2 SQLDA各部分关系
四、成员说明
1. sqld:使用的sqlvar结构的个数,即:输出列的个数
2. sqlvar:指向struct sqlvar_struct结构体,即:指向描述第一列信息的sqlvar结构体
3. desc_name:sqlda名称
4. desc_occ:sqlda结构的大小
5. desc_next:指向下一个SQLDA结构
6. sqltype:代表参数或列的数据类型。它是一个整数数据类型代码。如图3中的“宏定义”列。
7. sqllen:代表传送数据的长度。
8. sqldata:指向数据的地址。
9. sqlind:代表是否为NULL。如果该列不允许为NULL,则该字段不赋值;如果该列允许为NULL,则:该字段若为0,表示数据值不为NULL,若为-1,表示数据值为NULL。
10. sqlname:代表列名或变量名。
11. sqlformat:保留以后使用
12. sqlitype:指定用户定义的指示符变量的数据类型。
13. sqlilen:指定用户定义的指示符变量的长度。
14. sqlidata:指向用户定义的指示符变量所存放的数据。
五、数据类型外部数据类型
宏定义
代码
CHAR
SQLCHAR
0
SMALLINT
SQLSMINT
1
INTEGER
SQLINT
2
FLOAT
SQLFLOAT
3
SMALLFLOAT
SQLSMFLOAT
4
DECIMAL
SQLDECIMAL
5
SERIAL
SQLSERIAL
6
DATE
SQLDATE
7
MONEY
SQLMONEY
8
DATETIME
SQLDTIME
10
BYTE
SQLBYTES
11
TEXT
SQLTEXT
12
VARCHAR
SQLVCHAR
13
INTERVAL
SQLINTERVAL
14
NCHAR
SQLNCHAR
15
NVARCHAR
SQLNVCHAR
16
INT8
SQLINT8
17
SERIAL8
SQLSERIAL8
18
LVARCHAR
SQLLVARCHAR
43
BOOLEAN
SQLBOOL
45
图3 数据类型代码