C语言访问INFORMIX数据库 — SQLDA结构

一、简要概述

C语言通过ESQL访问informix数据库过程中,当不知道所执行的SQL查询语句返回结果中有多少列,但又要准确的获取查询结果时,此时必须使用informix提供的SQLDA结构来达到目的。此篇将较详细的介绍SQLDA的内部结构,,后续篇章将会详细讲解SQLDA的使用。

二、结构定义

C语言访问INFORMIX数据库 — SQLDA结构

图1 SQLDA定义

三、结构说明

从图1中可以看出,SQLDA是一种由三个不同部分组成的可变长数据结构:
1)第一部分:是SQLDA结构体本身
2)第二部分:一个或多个sqlvar结构,用于标志列的基本信息。
当用SQLDA把参数送到执行语句时,每一个参数都是一个sqlvar结构;当用SQLDA返回输出列信息时,每一列都是一个sqlvar结构。
3)第三部分:是查找结果的描述信息。

下图为SQLDA各部分关系图示:

C语言访问INFORMIX数据库 — 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

图3 数据类型代码