一、简要概述
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 |