EXEC SQL BEGIN DECLARE SECTION; //主变量说明开始
char deptname[20];
char hsno[9];
char hsname[20];
char hssex[2];
int HSage;
int NEWAGE;
EXEC SQL END DECLARE SECTION; //主变量说明结束
long SOLCODE;
EXEC SQL INCLUDE SQLCODEE; //定义SQL通信区
int main(void){
int count = 0;
char yn; //变量yn代表yes或no
printf("Please choose the department name(CS/MA/IS):");
scanf("%s", &deptname);
EXEC SQL CONNECT TO TEST@localhost:54321 USER "SYSTEM"/"MANAGER";//连接数据库
EXEC SQL DECLARE SX CURSOR FOR //定义游标SX
SELECT Sno,Sname,Ssex,Sage; //SX对应的语句
FORM Student
WHERE SDept=:deptname;
EXEC SQL OPEN SX; //打开游标 SX,指向查询结果的第一行
for(;;){ //用循环结构逐条处理结果集中的记录
EXEC SQL FETCH SX INTO :HSno,:HSname,:HSsex,:HSage; //推进游标,将当前数据放入主变量
if(SQLCA.SQLCODE != 0) //SQLCODE != 0,表示操作不成功
break //利用SQLCA中的状态信息决定何时退出循环
if(count++ == 0){ //如果是第一行的话,先打出行头
printf("\n%-10s%-20s%-10s%-10s%\n", "Sno", "Sname", "Ssex", "Sage");
}
printf("%-10s%-20s%-10s%-10s%\n", HSno, HSname, HSsex, HSage); //结果
printf("UPDATE AGE(y/n)?"); //询问用户是否要更新该学生的年龄
do{
scanf("%c", &yn);
} while(yn!='N' && yn != 'n' && yn != 'Y' && yn != 'y');
if(yn == 'y' || yn == 'Y'){ //更新操作
printf("INPUT NEW AGE:");
sncaf("%d", &NEWAGE); //用户输入新年龄到主变量中
EXEC SQL UPDATE Student //嵌入式SQL更新语句
SET Sage=:NEWAGE
WHERE CURRENT OF SX; //对当前游标指向的学生年龄进行更新
}
EXEC SQL CLOSE SX; //关闭游标SX, 不再和查询结果对应
EXEC SQL COMMIT WORK; //提交更新
EXEC SQL DISCONNECT TEST; //断开数据库连接
}
}
数据库应用编程(C语言嵌入式)
最新推荐文章于 2022-11-03 11:39:22 发布