您好,欢迎访问三七文档
实验3-3嵌入式SQL和ODBC的使用03CS__313110_45+60__曹玉瑾、周燕红一、实验目的1.熟悉ODBC的配置和使用2.熟悉嵌入式SQL编程3.巩固SQL的知识二、实验平台1.OS:Windows2000/XP2.DBMS:SQLServer2000KingBase(可选)3.Compiler:VisualC++6.0三、实验活动前的准备以下的实验前准备工作都是参考是实验要求中的实验预备知识进行的,在此没有给出做一下动作的原因及相关的一些知识,仅仅是给出了我们具体的一些活动。(1)嵌入式SQL编程:ⅰ、SQL预处理器由于我们的SQLServer的安装目录是C:\ProgramFiles\MicrosoftSQLServer\MSSQL因此,需要把安装文件中的文件夹binn的内容拷贝到该目录下覆盖原有的binn的全部内容。拷贝前必须关于有关SQL的所有进程,否则拷贝将无法成功进行。ⅱ、连接方式为了使经预处理后的c文件就以用c的编译器进行编译连接,我们需要使用VisualC++6.0进行编译连接,连接方式是动态连接,这就需要用到动态链接库SQLakw32.dll,sqlaiw32.dll;此两文件已经随同binn.rar的其他内容,被拷贝到C:\ProgramFiles\MicrosoftSQLServer\MSSQL\Binn下;但仍然需要把该路径加到系统的路径变量中,以使得程序运行时能找到这两个文件。方法1:把该两文件拷贝到操作系统目录下的子目录system32中我们使用的就是方法1。方法2:把D:\ProgramFiles\MicrosoftSQLServer\MSSQL\Binn加到系统环境变量path中。“我的电脑”-“属性”-“高级”-“环境变量”-“path,编辑”,如下图所示:在变量值中加入该路径值;注意,路径间用分号”;”分开。ⅲ、创建一个用户,以方便实验活动中中使用嵌入式SQL编程。在SQLServer的pubs数据库下,添加用户yjc,其密码为:yjc,并将该用户的角色同时设为public与db_owner,这样就允许我们在程序中访问该数据库,并做一定的操作。(2)通过ODBC访问数据库:ⅰ、配置ODBC,为SQLServer添加数据源。过程如下:①打开运行,输入命令“odbcad32.exe”,如下图所示:②探出窗口如下图所示:③点击右侧的“添加”,选择SQLSERVER,如下图示:④在新出窗口中,输入数据源的名称,如“lanxin”,并选择本地服务器,如下图示:⑤点击下一步,如下图:⑥在新弹出窗口中,更改默认的数据库为“cryone”(该数据库中表S、P、J、SPJ),如下图所示:⑦接下来的就点击完成。无需特殊的选择,最后点击确定,如下图:ⅱ、创建一个用户,以方便实验活动中中使用ODBC编程。在SQLServer的cryone数据库下(该数据库中含有上次实验创建的表S、P、J、SPJ),添加用户lanxin,其密码为:lanxin,并将该用户的角色同时设为public与db_owner,这样就允许我们在程序中访问该数据库,并做一定的操作。(3)初始化环境:1.SQLServer2000为其嵌入式SQL提供了一些特殊的接口;默认的安装方式(典型安装)并没有安装这些接口;因此,需要把devtools.rar解压到SQLServer的系统目录下(注意,不是安装目录);例如操作系统安装在C盘,则SQLServer的系统目录则是C:\ProgramFiles\MicrosoftSQLServer。后面的设置,假设操作系统安装在C盘。2.初始化SQLServer的预编译环境。初始化VisualC++6.0编译器环境,运行文件:\MicrosoftVisualStudio\VC98\Bin\VCVARS32.BAT初始化SQLServer的预编译环境,运行文件:\devtools\samples\esqlc\setenv.bat。3.初始化VisualC++6.0环境。Tools-options-directories-IncludeFiles:C:\ProgramFiles\MicrosoftSQLServer\devtools\includeTools-options-directories-LibFiles:C:\ProgramFiles\MicrosoftSQLServer\devtools\x86lib注意:这些路径需要设为第一项。如下图所示:Project-Settings-Link-Object/LibraryModules,添加库文件:SQLakw32.libCaw32.lib注意,两个文件之间用空格分开。四、实验活动实验活动要求:1.对以下的程序,要求调试成功,并在上机过程中演示2.分析嵌入式SQL和ODBC编程的主要结构(例如对ODBC的使用,先allocateenvironment,后allocateODBCconnection等)。3.记录实验过程,并对各活动(包括错误活动)作分析说明(1)阅读和分析程序esql.sqc,解释程序的主要内容和主要数据结构。A、打开文件esql.sqc,首先大概得浏览该程序可以看到嵌入式SQL编程的主要结构为:①说明主变量,其中主变量的定义必须放在以下两条说明性语句之间:EXECSQLBEGINDECLARESECTION;EXECSQLENDDECLARESECTION②连接数据库,语法的格式为:EXECSQLCONNECTTOSQLServer.DataBaseNameUSERlogName.passwd③对数据库进行相关操作,如作查询,语句格式为:EXECSQLselect属性列名INTO:主变量from表名WHERE条件;④出错处理,语句格式为:EXECSQLWHENEVERSQLERRORGOTO出错处理段;⑤程序最后要断开通数据库的连接:EXECSQLDISCONNECTALL;B、进一步仔细分析程序esql.sqc,可以看到该程序的主要实现的内容以及程序中的使用的数据结构为:①定义一个主变量“EmployeeID”,在该程序中,就是通过了这个主变量来实现C语言同数据库的通信的,而主变量的声明由以下的说明性语句中来说明:EXECSQLBEGINDECLARESECTION;intEmployeeID=0;EXECSQLENDDECLARESECTION;②打印出该程序的功能信息,即该程序是一个面向C语言编程的嵌入式SQL的范例,而在该程序中是以下语句说明了这一点:printf(SampleEmbeddedSQLforCapplication\n);③在该程序运行的环境下,尝试连接到SQL的数据库管理系统,同时也对连接是否正确作了一定的判断,若正确,则返回“建立连接”的信息,提示该程序可以使用嵌入式语句对数据库进行访问,并返回查询结果以供C语言处理,若连接部正确则属错“连接失败”信息,并且结束该程序。具体实现语句如下:EXECSQLCONNECTTOWXF.pubsUSERsa.sql;if(SQLCODE==0){printf(ConnectiontoSQLServerestablished\n);}else{printf(ERROR:ConnectiontoSQLServerfailed\n);return(1);}④在连接到数据库以后,执行查询语句,查找出订单的ID为345的员工的ID号,并存放在主变量EmployeeID中。具体实现语句如下:EXECSQLselectEmployeeIDINTO:EmployeeIDfromorderswhereOrderID=345;⑤当使用嵌入式SQL语句同数据库打交道时,如果发生错误,则对该错误作适当的处理,该程序中做的错误处理方式就是断开与数据库的连接。如下两个语句来实现:EXECSQLWHENEVERSQLERRORGOTOerror;error:EXECSQLDISCONNECTALL;⑥打印出查询结果:printf(EmployeeIdResultis:%d\n,EmployeeID);(2)对程序esql.sqc作适当的修改,使之可以在本地系统上可以运行。进行预处理、编译、连接(lib连接),查看运行结果。A、修改之后的esql.sqc内容如下(其中修改的部分用蓝色标识):#includestdio.h#includestdlib.hintmain(){EXECSQLINCLUDESQLCA;EXECSQLBEGINDECLARESECTION;//主变量intEmployeeID=0;EXECSQLENDDECLARESECTION;printf(SampleEmbeddedSQLforCapplication\n);//尝试连接到DBMS上EXECSQLCONNECTTOLENOVO-95F59392.pubsUSERyjc.yjc;if(SQLCODE==0){printf(ConnectiontoSQLServerestablished\n);}else{//连接DBMS错误printf(ERROR:ConnectiontoSQLServerfailed\n);return(1);}//执行查询语句,把结果放到主变量EmployeeID中EXECSQLselectEmployeeIDINTO:EmployeeIDfromorderswhereOrderID=345;EXECSQLWHENEVERSQLERRORGOTOerror;//打印结果printf(EmployeeIdResultis:%d\n,EmployeeID);error://断开连接EXECSQLDISCONNECTALL;return(0);}B、将修改之后的esql.sqc拷贝到目录C:\ProgramFiles\MicrosoftSQLServer\MSSQL\Binn下面(这是必需的,否则预编译无法成功,具体原因我们也不是很清楚),打开DOS命令,在路径C:\ProgramFiles\MicrosoftSQLServer\MSSQL\Binn下输入命令如下:执行后,便会在目录C:\ProgramFiles\MicrosoftSQLServer\MSSQL\Binn下生成了文件esql.cC、打开文件esql.c,执行该文件后的结果为:因为不存在employeeID=345的元组,所以返回结果为0。D、思考:1、sqlca结构中主要的数据项有哪些?我们常用的有哪些?答:sqlca是一个结构类型的变量,它是数据库和应用程序的一个接口。在执行程序时,SQLServer把每一个嵌入SQL语句执行的状态信息存入SQLCA中,根据这些信息,可判断SQL语句的执行是否成功,处理的行数,错误信息等,其组成如表所示:Structsqlca{unsignedchar;charsqlcaid[EYECATCH_LEN];----标识通讯区longsqlabc;---à通讯区的长度longsqlcode;---à保留最近执行的SQL语句的状态码struct{unsignedshortsqlerrml;-----à信息文本长度}sqlerrm;charsqlerrp[8];//Diagnosticinformationlongsqlerrd[6];//Diagnosticinformationcharsqlwarn[8];//Warningflagscharsqlext[8];//Reservedunsignedcharsqlstate[5];//newmember}每个数据项的具体说明如下:Herearefieldsanddatatypesforthesqlcadatastructure.FieldCdatatypeContainssqlcaidunsignedcharTextstringSQLCA.sqlabclongLengthoftheSQLCAdata
本文标题:嵌入式SQL 方法
链接地址:https://www.777doc.com/doc-6465523 .html