lSqld 。目前使用的sqlvar结构的个数 。
lSqltype 。代表参数或列的数据类型 。它是一个整数数据类型代码 。如:500代表smallint 。具体每个整数的含义见下表:SQL 列类型 SQLTYPE值 SQLTYPE 的字符名DATE 384/385 SQL_TYP_DATE / SQL_TYP_NDATE
TIME 388/389 SQL_TYP_TIME / SQL_TYP_NTIME
TIMESTAMP 392/393 SQL_TYP_STAMP / SQL_TYP_NSTAMP
n/a2 400/401 SQL_TYP_CGSTR / SQL_TYP_NCGSTR
BLOB 404/405 SQL_TYP_BLOB / SQL_TYP_NBLOB
CLOB 408/409 SQL_TYP_CLOB / SQL_TYP_NCLOB
DBCLOB 412/413 SQL_TYP_DBCLOB / SQL_TYP_NDBCLOB
VARCHAR 448/449 SQL_TYP_VARCHAR / SQL_TYP_NVARCHAR
CHAR 452/453 SQL_TYP_CHAR / SQL_TYP_NCHAR
LONG VARCHAR 456/457 SQL_TYP_LONG / SQL_TYP_NLONG
n/a3 460/461 SQL_TYP_CSTR / SQL_TYP_NCSTR
VARGRAPHIC 464/465 SQL_TYP_VARGRAPH / SQL_TYP_NVARGRAPH
GRAPHIC 468/469 SQL_TYP_GRAPHIC / SQL_TYP_NGRAPHIC
LONG VARGRAPHIC 472/473 SQL_TYP_LONGRAPH / SQL_TYP_NLONGRAPH
FLOAT 480/481 SQL_TYP_FLOAT / SQL_TYP_NFLOAT
REAL4 480/481 SQL_TYP_FLOAT / SQL_TYP_NFLOAT
DECIMAL5 484/485 SQL_TYP_DECIMAL / SQL_TYP_DECIMAL
INTEGER 496/497 SQL_TYP_INTEGER / SQL_TYP_NINTEGER
SMALLINT 500/501 SQL_TYP_SMALL / SQL_TYP_NSMALL
n/a 804/805 SQL_TYP_BLOB_FILE / SQL_TYPE_NBLOB_FILE
n/a 808/809 SQL_TYP_CLOB_FILE / SQL_TYPE_NCLOB_FILE
n/a 812/813 SQL_TYP_DBCLOB_FILE / SQL_TYPE_NDBCLOB_FILE
n/a 960/961 SQL_TYP_BLOB_LOCATOR / SQL_TYP_NBLOB_LOCATOR
n/a 964/965 SQL_TYP_CLOB_LOCATOR / SQL_TYP_NCLOB_LOCATOR
n/a 968/969 SQL_TYP_DBCLOB_LOCATOR / SQL_TYP_NDBCLOB_LOCATOR我们知道,SQLDA的作用是应用程序与数据库之间交换数据 。对于从数据库向应用程序输出数据,则SQLDA存放了每列的信息,如:数据类型、长度和值 。输出数据要同FETCH语句结合;对于从应用程序向数据库输入数据,则要同OPEN或EXECUTE操作结合 。请看下面这个ADHOC例子,来理解SQLDA的作用 。这个例子很经典,它的功能是处理任意输入的SQL语句,并返回结果 。
#include
#include
#include
#include
#include
/*包含SQLDA结构的定义*/
#include
#include "util.h"
/*包含SQLCA结构的定义*/
EXEC SQL INCLUDE SQLCA;
/* "check_error" is a function found in the util.c program */
#define CHECKERR(CE_STR) check_error (CE_STR, &sqlca)
#define SQLSTATE sqlca.sqlstate
/*初试化SQLDA*/
int init_da (SQLDA **DAPointer, int DAsqln);
/*为存放列数据的sd_column结构申请空间*/
int alloc_host_vars (SQLDA *sqldaPointer);
/*释放SQLDA所申请的空间*/
void free_da (SQLDA *sqldaPointer);
/*获取列名信息*/
char * readColName (SQLDA *sqldaPointer, short sd_columnIndex, char * buffer);
/*获取列数据*/
char * readCol (SQLDA *sqldaPointer, short sd_columnIndex, char * buffer);
/*处理SQL语句*/
int process_statement (char[1000]);
#define MAX_COLUMNS 255
int main(void) {
int rc;
char sqlInput[255];
char st[1000]="";
char Transaction;
char tmpstr[1024];
/*定义宿主变量*/
EXEC SQL BEGIN DECLARE SECTION; (3)
char server[9];
char userid[9];
char passwd[19];
EXEC SQL END DECLARE SECTION;
printf("Sample C program : ADHOC interactive SQLn");
/* 初试化与数据库的连接 */
do {
printf("input the server (database) which you wish to attach to : n");
gets (sqlInput);
strcpy(server,sqlInput);
printf("input your userid : n");
gets (sqlInput);
strcpy (userid, sqlInput);
printf("input your passwd : n");
gets (sqlInput);
strcpy (passwd, sqlInput);
printf("CONNECTING TO %sn",server);
/*连接数据库*/
EXEC SQL CONNECT TO :server USER :userid USING :passwd;
/*检查连接是否成功*/
CHECKERR("CONNECT TO DATABASE");
} while (SQLCODE != 0); /* enddo */
printf("CONNECTED TO %sn",server);
/* Enter the continuous command line loop. */
while ( 1 ) {
/*提示用户输入要操作的SQL语句*/
printf ("Enter an SQL statement or "quit" to Quit :n");
gets (sqlInput);
if (strcmp(sqlInput, "quit") == 0) {
推荐阅读
- 坚果pro2哪个版本值得买?坚果pro2各版本有什么区别?
- F4版与D2版相比有何特点
- 坚果Pro 2有几个版本?坚果Pro 2各版本价格多少?
- 墨者写作中查看历史版本具体操作步骤
- 完全版 ESQL/C资料三
- kha苹果是什么版本
- 荒野乱斗九游版激活码在哪
- HTC U11国行版系统更新了什么?HTC U11国行版系统更新内容
- 小米MIX2黑色陶瓷版和全陶瓷尊享版哪个好?哪个更划算?
- 增补版 SCO UNIX快速入门
