C语言访问INFORMIX数据库 — SQLDA结构
一、简要概述
C语言通过ESQL访问informix数据库过程中,当不知道所执行的SQL查询语句返回结果中有多少列,但又要准确的获取查询结果时,此时必须使用informix提供的SQLDA结构来达到目的。此篇将较详细的介绍SQLDA的内部结构,,后续篇章将会详细讲解SQLDA的使用。
二、结构定义
图1 SQLDA定义
三、结构说明
从图1中可以看出,SQLDA是一种由三个不同部分组成的可变长数据结构:
1)第一部分:是SQLDA结构体本身
2)第二部分:一个或多个sqlvar结构,用于标志列的基本信息。
当用SQLDA把参数送到执行语句时,每一个参数都是一个sqlvar结构;当用SQLDA返回输出列信息时,每一列都是一个sqlvar结构。
3)第三部分:是查找结果的描述信息。
下图为SQLDA各部分关系图示:
图2 SQLDA各部分关系
四、成员说明
>01. sqld:使用的sqlvar结构的个数,即:输出列的个数
>02. sqlvar:指向struct sqlvar_struct结构体,即:指向描述第一列信息的sqlvar结构体
>03. desc_name:sqlda名称
>04. desc_occ:sqlda结构的大小
>05. desc_next:指向下一个SQLDA结构
>06. sqltype:代表参数或列的数据类型。它是一个整数数据类型代码。如图3中的“宏定义”列。
>07. sqllen:代表传送数据的长度。
>08. sqldata:指向数据的地址。
>09. sqlind:代表是否为NULL。如果该列不允许为NULL,则该字段不赋值;如果该列允许为NULL,则:该字段若为0,表示数据值不为NULL,若为-1,表示数据值为NULL。
>10. sqlname:代表列名或变量名。
>11. sqlformat:保留以后使用
>12. sqlitype:指定用户定义的指示符变量的数据类型。
>13. sqlilen:指定用户定义的指示符变量的长度。
>14. sqlidata:指向用户定义的指示符变量所存放的数据。
五、数据类型
C数据类型 |
宏定义 |
代码 |
CCHARTYPE |
SQLCHAR |
0 |
CSHORTTYPE |
SQLSMINT |
1 |
CINTTYPE |
SQLINT |
2 |
CDOUBLETYPE |
SQLFLOAT |
3 |
CDOUBLETYPE |
SQLSMFLOAT |
4 |
CDECIMALTYPE |
SQLDECIMAL |
5 |
CINT8TYPE |
SQLSERIAL |
6 |
CDATETYPE |
SQLDATE |
7 |
CMONEYTYPE |
SQLMONEY |
8 |
CDTIMETYPE |
SQLDTIME |
10 |
CLOCATORTYPE |
SQLBYTES |
11 |
CLOCATORTYPE |
SQLTEXT |
12 |
CVCHARTYPE |
SQLVCHAR |
13 |
CINVTYPE |
SQLINTERVAL |
14 |
CFIXCHARTYPE |
SQLNCHAR |
15 |
CVCHARTYPE |
SQLNVCHAR |
16 |
CINT8TYPE |
SQLINT8 |
17 |
CINT8TYPE |
SQLSERIAL8 |
18 |
CLVARCHARTYPE |
SQLLVARCHAR |
43 |
CBOOLTYPE |
SQLBOOL |
45 |