黄冈师范学院提高型实验报告实验课题嵌入式SQL访问数据库(实验类型:□综合性■设计性□应用性)实验课程数据库系统概论实验时间2012年5月25日学生姓名邵旭东专业班级信息1001班学号201021240106一、实验目的和要求1. 编写嵌入式C程序,编程实现了对“学生课程数据库”的访问和对Student表中年龄进行更新。
2. 安装SQL Server2000和Visual C++程序。
3、将一段连续的SQL操作写成嵌入到C程序中的程序,调试程序,使得程序能完成一项复杂的数据处理功能,并提交程序。
二、实验条件R429三星笔记本电脑一台。
三、实验原理分析四、实验方案或步骤1.初始化编译环境将SQL安装光盘内的DEVTOOLS文件夹复制到SQL的安装目录下(!!默认下为C:\Program Files\Microsoft SQL Server\),执行.\DEVTOOLS\SAMPLES\ESQLC\目录中的UNZIP_ESQLC.EXE文件(!!点击finish,默认解压到当前目录下!!),解压预编译必要的头文件和库文件,然后运行解压出来的批处理文件setenv.bat初始化SQL预编译环境(这项操作实际上设置两个环境变量)。
接下来添加SQL预编译接口,将安装光盘中X86\BINN中的nsqlprep.exe,sqlaiw32.dll,sqlakw.32.dll复制到SQL安装目录(!!默认下为C:\Program Files\Microsoft SQL Server\)中的\MSSQL\Binn\(注:\MSSQL\Binn\改为:\MSSQL\Binn;)目录下,并将C:\Program Files\Microsoft SQL Server\MSSQL\Binn添加到环境变量中(方法是:右击我的电脑,点击我的电脑属性,点击高级,点击环境变量,点击path ,粘贴在‘;’号后)。
SQL设置完了,现在开始设置VC编译环境。
进入VC安装目录(默认为C:\Program Files\Microsoft Visual Studio\),运行VC98\Bin目录中的批处理文件VCVARS32.BAT。
运行VC,添加二次编译ESQL程序的头文件和库文件:(1).工具->选项->目录->在Include files中添加SQL安装目录\devtools\include\ (默认为: C:\Program Files\Microsoft SQL Server\devtools\include)将SQL server自带的用于数据库开发的头文件包含到工程环境中。
(2).工具->选项->目录->在Lib files中添加SQL安装目录\devtools\x861ib\(默认为: C:\Program Files\Microsoft SQL Server\devtools\x86lib)将开发用到的包包含到工程中。
2.ESQL程序代码的编写与调试#include<stdio.h>#include<stdlib.h>EXEC SQL BEGIN DECLARE SECTION;char deptname[20];char HSno[9];char HSname[20];char HSsex[4];int HSage;int NEWAGE;EXEC SQL END DECLARE SECTION;long SQLCODE;EXEC SQL INCLUDE sqlca;int main(){int count=0;char yn;printf("请输入您要更新的系名(Sdept):");scanf("%s",&deptname);EXEC SQL CONNECT TO X6X8-20120111LP.sxd USER sa.123456;EXEC SQL DECLARE SX CURSOR FORSELECT Sno,Sname,Ssex,SageFROM StudentWHERE Sdept=:deptname;EXEC SQL OPEN SX;for(;;){EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex, :HSage;if(sqlca->sqlcode==0)break;if(count++==0)printf("\n%-10s%-20s%-10s%-10s\n","Sno","Sname","Ssex","Sage");}printf("%-10s%-20s%-10s%-10d\n",HSno,HSname,HSsex,HSage);printf("是否修改年龄?(y/n)");do{scanf("%c",&yn);}while(yn!='n'&&yn!='N'&&yn!='Y'&&yn!='y');if(yn=='y'||yn=='Y'){printf("输入新的年龄:");scanf("%d",&NEWAGE);EXEC SQL UPDATE StudentSET Sage=:NEWAGEWHERE CURRENT OF SX;}else{printf("是否退出程序?(Y/N)");do{scanf("%c",&yn);}while(yn!='n'&&yn!='N'&&yn!='Y'&&yn!='y');if(yn=='y'||yn=='Y'){break;}}EXEC SQL CLOSE SX;EXEC SQL COMMIT WORK;EXEC SQL DISCONNECT ALL;}将该程序保存为sql.sqc保存在D盘。
3.建立数据库,数据的录入。
如上图建立数据库“sxd”在该数据库中建立表“student”,录入数据如上图。
同时必须打开了SQL server 身份验证模式。
并设置密码,设置密码的操作步骤如下:运行企业管理器,展开你要连接的服务器,再展开安全性目录,点击登录,在右边窗口用鼠标右击sa,单击属性,在密码一栏输入新密码,单击确定后再输入一次新密码,sa的密码就修改成功了。
在这里我所设置的密码为“123456”。
这时在“sql.sqc”中将“服务器名.数据库名 USER 登录名. 密码;”改为“X6X8-20120111LP.sxd USER sa.123456;”并保存。
4.进行ESQL程序的预编译打开命令提示符(cmd)。
进入VC安装目录(默认为C:\Program Files\Microsoft Visual Studio\),将VC98\Bin目录中的批处理文件VCVARS32.BAT拖入cmd窗口中运行。
然后再键入: “ nsqlprep程序保存路径\sql.sqc \SQLACCESS \DB 服务器名.数据库名 \PASS 登录名.密码”。
在这里我输入“nsqlprep D:\sql.sqc \SQLACCESS \DB X6X8-20120111LP.sxd \PASS sa.123456”。
完成预编译后则会在原sql.sqc文件存储位置处生成同名C文件即sql.c。
然后即可进行下一步C编译。
5.进行C编译运行VC++6.0,新建一个"WIN32 Console Application"(!!注意是"WIN32 Console Application"不要选成了"WIN32 Application"!!)的工程,然后将预编译生成的c文件加入工程。
此时还不能编译成功,需添加两个库文件SQLakw32.lib,Caw32.lib。
操作过程:(1). 文件->新建->工程->WIN32 Console Application->输入工程名->确定(2). 工程->设置->连接->在对象/库模块中输入SQLakw32.lib Caw32.lib (!!两个之间用空格分开!!)完成上述操作后, 就可以开始编译、连接及运行了。
运行好后在窗口出现如下:输入“CS”。
出现如下:然后修改年龄如下:如此完成了实验数据的修改。
五、实验结果此时数据库中的数据如下图:李勇的年龄已由23改为25;刘晨的年龄已由21改为23。
到此,实验完成!六、讨论在此次实验中我遇到了很多困难:在“cmd”窗口中输入“nsqlprep D:\sql.sqc \SQLACCESS \DB X6X8-20120111LP.sxd \PASS sa.123456”时若出现“nsqlprep不是内部或外部命令,也不是可运行的程序或批处理文件”则表示在设置环境变量时出错,需重新设置环境变量;若出现“Source file must have .SQC extension”则表示在输入“nsqlprep D:\sql.sqc \SQLACCESS \DB X6X8-20120111LP.sxd \PASS sa.123456”时在每段字符中间没有用空格间隔。
则重新输入,且每段字符用空格隔开即可。
另外注意:打开“cmd”后要先将VC98\Bin目录中的批处理文件VCV ARS32.BAT 拖入cmd窗口中运行。
在修改数据库密码的时候,要注意切换下面的数据库为自己建立的数据库,这里我建立的是“sxd”,因此要切换成“sxd”。
若在VC运行后窗口中只出现列项而没有数据显示,则是数据库密码前后不一致,则重新在cmd窗口输入生成新的预编译代码。
在做此次试验以前,由于数据课上,并没有学习环境变量的设置,数据库密码的修改等等。
所以,课后花了很多时间去上网学习,搜索视频教程。
过程是痛苦的,将书一遍遍的读,起初老是弄不明白代码的意思,也不懂书上的程序到底是怎样连接上数据库的,在接二连三的碰壁之后,终于有点儿理解了。
此次实验虽然有很多不足之处,但实现了实验的要求,相信在以后学习SQL的路上,会越走越远。