一、头文件
引入informix数据库的头文件时,可使用如下的方式:
exec sql include sqlca;
exec sql include sqlda;
exec sql include sqlhdr;
exec sql include decimal;
exec sql include locator;
exec sql include varchar;
exec sql include datetime;
exec sql include sqlstype;
exec sql include sqltypes;
exec sql include sqlstype;
二、宏定义
宏在宿主变量使用时,此宏定义可使用如下方式:
exec sql define sql_usrname_max_len 64; /* user name max len */
exec sql define sql_passwd_max_len 64; /* password max len */
exec sql define sql_svrname_max_len 64; /* database name max len */
exec sql define sql_cnname_max_len 64; /* connect name max len */
exec sql define sql_stmt_max_len 1024; /* sql statement max len */
三、结构体定义
当sql语句中使用了结构体变量时,,那么此变量的类型结构体必须通过如下方式定义:
exec sql begin declare section;
typedef struct
{
int id;
char name[32];
char gender;
int age;
char brf[256];
}dbstudent_t;
exec sql end declare section;
如:
int db_ifx_update(...)
{
exec sql begin declare section;
dbstudent_t dbstudent;
exec sql end declare section;
...
exec sql update set *=(:dbstudent) where;
}
四、变量定义
宿主变量的必须通过如下方式进行定义:
exec sql begin declare section;
char svrname[sql_svrname_max_len], /* server name */
usrname[sql_usrname_max_len], /* user name */
passwd[sql_passwd_max_len], /* passwd */
cnname[sql_cnname_max_len]; /* connect name */
exec sql end declare section;
如:
int db_ifx_open(...)
{
exec sql begin declare section;
char svrname[sql_svrname_max_len], /* server name */
usrname[sql_usrname_max_len], /* user name */
passwd[sql_passwd_max_len], /* passwd */
cnname[sql_cnname_max_len]; /* connect name */
exec sql end declare section;
...
exec sql connect to :svrname as :cnname user :usrname using :passwd;
...
}
五、错误信息
每执行一次sql语句后,错误码存放在全局变量sqlca.sqlcode中,可通过rgetmsg()获取错误信息。如:
int db_ifx_commit(...)
{
exec sql commit work;
if(sqlca.sqlcode {
rgetmsg(sqlca.sqlcode, errmsg, sizeof(errmsg));
fprintf(stdout, %s, errmsg);
return -1;
}
...
}