如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
嵌入式SQL(ESQL)●●处理过程::EXECSQL<SQL语句>::含有ESQL主语言→RDBMS预处理→ESQL转为函数调用→主语言编译程序编译→目标语言程序●●SQL语言和主语言的通信::向主语言传递SQL语句执行状态,主要有SQL通信区SQLCA实现::主语言向SQL语句提供参数,主要用主变量实现::将结果交由主语言处理,主要是主变量和游标实现●●SQL通信区SQLCA::由在程序中的SQLCA定义的EXECSQL/INCLUDESQLCA加以定义其中含有一个变量SQLCODE用来储存执行返回结果,如过成功,返回查询结构结合,如果失败则返回失败语句●●主变量:SQL使用的主语言程序变量简称为主变量::输入主变量:应用程序赋值后SQL语言引用::输出主变量:SQL语言对其赋值或设置状态后,返回给应用程序::指示变量::指示主变量为空否或截断●●游标:系统为用户开设的数据缓冲区,存放SQL语句执行后的结构集,永和可以逐一获取数据,赋值给主变量,交由主语言进行进一步处理●●关闭数据库连接::EXECSQLCONNECTTOtarget[AS连接名称][USER用户名]修改连接::EXECSQLSETCONNECTION连接名|DEFAULT●●关闭数据库连接::EXECSQLDISCONNECT[连接名]●●一段使用C语言处理学生的年龄的数据库连接程序:{程序要仔细研究,代码省略}EXECSQLBeginSection/*主变量说明*/chardeptname[20];charHSno[9];charHSname[20];charHSsex[2];intHSage;intNEWAGE;EXECSQLEndDeclareSection/*主变量说名结束*/longSQLCODE;EXECSQLIncludesqlca;/*定义通信区*/intmain(void){/*主函数开始*/intcount=0;charyn;/*代表是否得变量*/printf(“请选择系的名称(CS/MA/IS):”);scanf(“s%”,&deptname);EXECSQLConnectToTest@localhost:54321“system”/”manager”;/*连接Test数据库*/EXECSQLDeclareSXCursorFor/*定义游标SX,说明性语句*/SelectSno,Sname,Ssex,SageFromstudentWhereSdept=:deptname;/*并不会执行语句*/EXECSQLOpenSX;/*打开游标SX,从数据库中查询出所有的deptname系的信息存储在游标缓冲区中,指向SX游标指向第一条记录*/for(;;){EXECSQLFetchSXINTO:HSno,:HSname,:HSsex,:HSage;/*将当前游标指向的数据赋给主变量,完成后将游标执行查询结果的下一条记录*/if(sqlca.sqlcode!0)break;/*表示上面的赋值操作失败,则结束这个循环,最终循环会在对整个查询结果访问完成后从这儿跳出去*/if(count++=0)printf(“\n%-10s%-20s%-10s%-10s\n”,”Sno”,”Sname”,”Ssex”,”Sage”);/*如果是第一行,就将表头输出*/print(“%-10s%-20s%-10s%-10s%\n”,HSno,HSname,HSsex,HSage);/*打印当前行学生信息*/printf(“是否更改学生的年龄(y/n)”);do{scanf(“%c”&yn);}while(yn!=”y”&&yn!=”Y”&&yn!=”n”&&yn!=”N”);/*用户输入正确时候跳出循环*/if(yn==”y”||yn==”Y”){printf(”请输入该学生新的年龄?“);scanf(“%d’&NEWAGE);EXECSQLUpdatestudentSetSage=:NEWAGEWhereCurrentofSX}/*更新的游标SX指向的当前记录*//*SX游标指向不是一个实际存在的元组,就不许使用Currentof游标,即不准跟新或者删除了,其实跟新删除这样的视图没有意义*/}/*完成对所有的学生记录的遍历询问是否修改*/EXECSQLCloseSX;/*关闭游标SX,不再和查询结果对应*/EXECSQLCommitWork/*提交所有更新给数据库*/EXECSQLDisconnectTest/*断开同Test数据库的连接*/}●●不用游标的SQL语句●说明性语句