免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1349 | 回复: 1
打印 上一主题 下一主题

帮我看看错在哪里?(AIX下DB2嵌入SQL) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-28 16:30 |只看该作者 |倒序浏览
//Sales1.sqc
#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;
#include "/usr/opt/db2_08_01/include/sqlenv.h"
#include "/usr/opt/db2_08_01/include/sql.h"
#include "/usr/opt/db2_08_01/include/sqlutil.h"

void PrintStr()
{
int i;
for (i=0;i<5;i++)
printf("Hello World!\n";
}


void getDB2data()
{

EXEC SQL BEGIN DECLARE SECTION;
char userid[3]="qlw";
char psw[8]="12345678";
char DBName[6]="sample";
sqlint32 iSales;
char sRegion[15];

EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE SQLCA;

//EXEC SQL INCLUDE SQLDA;
//struct sqlda *inout_sqlda = (struct sqlda *)
//malloc(SQLDASIZE(1));

char cRegion[15];

printf("\nTry to connect DB...\n";
EXEC SQL CONNECT TO BName USER :userid USING :psw;
if(SQLCODE) printf("Connected DB. User=%s\n",userid);
EXEC SQL SELECT REGION,SALES INTO :sRegion,:iSales FROM DB2INST1.SALES WHERE SALES=14;
if(SQLCODE) printf("\nRegion=%s Sales=%d\n",sRegion,iSales);

strcpy(cRegion,sRegion);
printf("\ncRegion=%s\n",cRegion);
printf("\nPrint DB Info complete\n";

EXEC SQL CONNECT RESET;
//free( inout_sqlda );
}

int main()
{
PrintStr();
getDB2data();
return 0;
}


----------------------------------------------------
上面代码在db2预编译通过了:
db2 =>; prep /home/qlw/Sales/Sales1.sqc

LINE MESSAGES FOR Sales1.sqc
------ --------------------------------------------------------------
SQL0060W The "C" precompiler is in progress.
SQL0091W Precompilation or binding was ended with "0"
errors and "0" warnings.

修改后的.c源文件编译、链接好象都可以了,运行结果却不对:
$ gcc -c Sales1.c
$ gcc -o Sales1 Sales1.o -ldb2 -L/usr/opt/db2_08_01/lib
$ Sales1
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!

Try to connect DB...
Connected DB. User=qlw

Region= Sales=0

cRegion=

Print DB Info complete

数据库中的信息为:
db2 =>; select * from db2inst1.sales where sales=14

SALES_DATE SALES_PERSON REGION SALES
---------- --------------- --------------- -----------
1996-03-31 LEE Ontario-South 14

1 record(s) selected.

为什么?是不是编译、连接有问题?怎么办?

论坛徽章:
0
2 [报告]
发表于 2004-06-29 09:18 |只看该作者

帮我看看错在哪里?(AIX下DB2嵌入SQL)

EXEC SQL SELECT REGION,SALES INTO :sRegion,:iSales FROM DB2INST1.SALES WHERE SALES=14;
if(SQLCODE) printf("\nRegion=%s Sales=%d\n",sRegion,iSales);


这段代码有问题
if(SQLCODE)
是判断sql执行的返回值的,你返回值不为0,也就是说sql执行错误了,你才打印数据信息,这个有问题吧?

EXEC SQL SELECT REGION,SALES INTO :sRegion,:iSales FROM DB2INST1.SALES WHERE SALES=14;
if(SQLCODE)
{
       printf("SQL EXEC ERR! SQLCODE:%d\n",SQLCODE);
       EXEC SQL Disconnect ALL;
       return  1;
}

printf("\nRegion=%s Sales=%d\n",sRegion,iSales);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP