第17讲 数据库编程.ppt

上传人:asd****56 文档编号:87677290 上传时间:2023-04-16 格式:PPT 页数:27 大小:281KB
返回 下载 相关 举报
第17讲 数据库编程.ppt_第1页
第1页 / 共27页
第17讲 数据库编程.ppt_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《第17讲 数据库编程.ppt》由会员分享,可在线阅读,更多相关《第17讲 数据库编程.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Chapter8数据库编程数据库编程l嵌入式嵌入式SQLl存储过程存储过程1嵌入式嵌入式SQLESQL:数据库访问的应用程序接口,由嵌入在高级:数据库访问的应用程序接口,由嵌入在高级语言中的语言中的SQL语句组成;语句组成;宿主语言:被嵌入宿主语言:被嵌入SQL的程序设计语言,如的程序设计语言,如C、C+、Java等。等。l工作原理工作原理l扩展语法扩展语法lESQL+VC配置方法配置方法1.1ESQL工作原理工作原理(1)1.1ESQL工作原理工作原理(2)混合编程中,混合编程中,SQL语句负责操纵数据库,高级语言语句负责操纵数据库,高级语言语句负责控制程序流程。语句负责控制程序流程。l数据

2、库工作单元与源程序工作单元之间的数据库工作单元与源程序工作单元之间的通信通信包括:包括:l1)SQL语句向主语言传递执行状态信息,使主语语句向主语言传递执行状态信息,使主语言能够据此信息控制程序流程,主要用言能够据此信息控制程序流程,主要用SQL通信通信区区(sqlca)实现;实现;l2)将)将SQL语句的查询结果交主语言处理,用语句的查询结果交主语言处理,用主变主变量量和和游标游标(CURSOR)实现;实现;l3)主语言向)主语言向SQL语句提供参数,用语句提供参数,用主变量主变量(Hostvariable)实现。实现。1.2ESQL语法语法l在在ESQL中,为了区分中,为了区分SQL语句与

3、主语言语句,语句与主语言语句,所有所有SQL语句都必须加前缀语句都必须加前缀EXECSQL,并以,并以;结束结束.EXECSQL;1.2.1SQL通信区通信区lSQL语句执行后,系统要反馈给应用程序若干信息,包语句执行后,系统要反馈给应用程序若干信息,包括系统当前工作状态和运行环境的各种数据。这些信息括系统当前工作状态和运行环境的各种数据。这些信息将送到将送到sqlca中;中;lsqlca中有变量中有变量sqlcode,用于存放返回代码。若为,用于存放返回代码。若为0,则表示则表示SQL语句操作成功语句操作成功;若为非若为非0,则表示操作失败。,则表示操作失败。lSQLCA在应用程序中的定义方

4、法:在应用程序中的定义方法:EXECSQLINCLUDEsqlca;l补充补充sqlca由由sqlca.h头文件定义头文件定义,sqlcode中错误中错误代码的定义可在头文件代码的定义可在头文件sqlerr.h中找到。中找到。1.2.2主变量主变量l主变量:主变量既可用于主变量:主变量既可用于ESQL语句,也可用于普通语句,也可用于普通C语句,而一般的语句,而一般的C变量则只能用于普通变量则只能用于普通C语句;语句;分为输入主变量和输出主变量。分为输入主变量和输出主变量。l指示变量:一个主变量可以附带一个指示变量,它是指示变量:一个主变量可以附带一个指示变量,它是一个整型变量,当其为负数可用于

5、指示主变量为空。一个整型变量,当其为负数可用于指示主变量为空。l语法规则:语法规则:l使用前必须在下列两个语句之间说明:使用前必须在下列两个语句之间说明:EXECSQLBEGINDECLARESECTION;EXECSQLENDDECLARESECTION;l在在ESQL中使用主变量时,必须加前缀中使用主变量时,必须加前缀“:”1.2.3建立和关闭数据库连接建立和关闭数据库连接lESQlESQl程序访问数据库必须先连接数据库。程序访问数据库必须先连接数据库。建立连接的建立连接的ESQLESQL语句是语句是EXEC SQL CONNECT TO dbserver.dbname AS connec

6、tion-name USER username.password;l当某个连接上的数据库操作完成后,应用程序应主动释当某个连接上的数据库操作完成后,应用程序应主动释放所占用的连接资源。放所占用的连接资源。关闭数据库连接的关闭数据库连接的ESQlESQl语句有:语句有:EXEC SQL DISCONNECT ALL;EXEC SQL DISCONNECT connection_name;EXEC SQL DISCONNECT CURRENT;#include EXEC SQL BEGIN DECLARE SECTION;char name10;int age;EXEC SQL END DECLA

7、RE SECTION;/必须写在这个位置必须写在这个位置 EXEC SQL INCLUDE sqlca;int main()printf(Lets test DB HaHa!n);EXEC SQL CONNECT TO XP-201004210924.scdb USER yuyan.12345678;/必须使用服务器的名字,不能用必须使用服务器的名字,不能用local;新建一个用户,并赋予密码;新建一个用户,并赋予密码 if(sqlca-sqlcode=0)printf(Connection to SQL Server establishedn);else printf(ERROR:Conne

8、ction to SQL Server failedn);return(1);EXEC SQL select sname,sage INTO:name,:age from student where sno=95001;printf(“%s%dn”,name,age);EXEC SQL DISCONNECT ALL;printf(Connection to SQL Server disconnected!n);程序示例程序示例1使用使用INTO子句存子句存放查询结果放查询结果1.2.4游标游标l一组主变量一次只能存放一条记录对应的信息,仅使用一组主变量一次只能存放一条记录对应的信息,仅使用主变

9、量不能完全满足主变量不能完全满足SQL向程序输出数据的要求,因此向程序输出数据的要求,因此引入游标的概念。引入游标的概念。l游标游标是系统为用户开设的数据缓冲区,存放是系统为用户开设的数据缓冲区,存放SQL语句的语句的执行结果。用户可以通过游标逐一获取记录,并赋给主执行结果。用户可以通过游标逐一获取记录,并赋给主变量,交由主语言进一步处理。变量,交由主语言进一步处理。使用游标的步骤(使用游标的步骤(1)l说明游标。为一条说明游标。为一条SELECT语句定义游标:语句定义游标:EXECSQLDECLARECURSORFORl打开游标。打开游标。EXECSQLOPENl打开游标实际上时打开游标实际

10、上时执行执行相应的相应的select语句,把查询结果语句,把查询结果取到缓冲区。这时游标处于活动状态,指针指向查询结取到缓冲区。这时游标处于活动状态,指针指向查询结果集中的第一条记录。果集中的第一条记录。使用游标的步骤(使用游标的步骤(2)l推进游标指针并取当前记录。推进游标指针并取当前记录。EXECSQLFETCHINTO指示变量指示变量,指示变量指示变量l关闭游标,释放缓冲区及其他资源。关闭游标,释放缓冲区及其他资源。EXECSQLCLOSE程序示例程序示例2#includeEXECSQLBEGINDECLARESECTION;intnum;charname10;intage=0;intn

11、ewage;charsex4;chardept4;EXECSQLENDDECLARESECTION;EXECSQLINCLUDEsqlca;intmain()charflag;inti;printf(LetstestDB11HaHa!n);EXECSQLCONNECTTOXP-201004210924.scdbUSERyuyan.12345678;if(SQLCODE=0)printf(ConnectiontoSQLServerestablishedn);elseprintf(ERROR:ConnectiontoSQLServerfailedn);return(1);EXECSQLselect

12、count(*)INTO:numfromstudent;EXECSQLDECLARESXCURSORFORSELECTsname,ssex,sage,sdeptFROMstudent;EXECSQLOPENSX;for(i=1;ioptions-directories-IncludeFiles:添加添加C:ProgramFilesMicrosoftSQLServerdevtoolsinclude。将将SQLserver自带的用于数据库开发的自带的用于数据库开发的头文件头文件包含到工程包含到工程环境中。环境中。Tools-options-directories-LibFiles:添加添加C:Pr

13、ogramFilesMicrosoftSQLServerdevtoolsx861ib。将将开发用到的开发用到的包包包含到工程中。包含到工程中。project-Settings-Link-Object/LibraryModules,添加,添加库文件库文件:SQLakw32.lib,Caw32.lib。这两个文件之。这两个文件之间用空格分开。间用空格分开。环境初始化环境初始化预编译预编译lC语言编译程序不能识别应用程序中的语言编译程序不能识别应用程序中的SQL语句,需要经过预处语句,需要经过预处理程序将其转换成理程序将其转换成C语句。语句。lSQLServer的的预处理程序预处理程序是是nsqlp

14、rep.exe。l【注意注意】nsqlprep.exe在在SQLServer安装目录的安装目录的MSSQLBinn下。下。若若SQLServer数据库采用的是默任安装方式,则需要把它从光盘数据库采用的是默任安装方式,则需要把它从光盘的的x86binn拷贝到指定目录下。拷贝到指定目录下。l预编译程序预编译程序nsqlprep的常用语法为的常用语法为:nsqlprepESQL_File【例子例子】在命令行下运行:在命令行下运行:nsqlprepdemo.sqc,则生成,则生成demo.c,将该文件添加到将该文件添加到VC工程中编译即可。工程中编译即可。注意:必须在注意:必须在nsqlprep所在目

15、录下,运行该命令。所在目录下,运行该命令。编译,链接与运行编译,链接与运行l在在VC+6.0中创建一个中创建一个控制台控制台Proiect,然后将预编译,然后将预编译生成的生成的c文件加入文件加入Proiect,编译连接即可生成访问,编译连接即可生成访问SQLServer的可执行程序。的可执行程序。lVisualC+6.0进行编译连接时需要用到动态链接库进行编译连接时需要用到动态链接库SQLakw32.dll与与SQLaiw32.dll。l从光盘的从光盘的x86binn将这两个文件拷贝到将这两个文件拷贝到SQLServer安装目录安装目录的的MSSQLBinn文件夹下,并把它们的路径加到系统路

16、径变量文件夹下,并把它们的路径加到系统路径变量中,以使得程序运行时能找到它们,具体添加方法如下中,以使得程序运行时能找到它们,具体添加方法如下:方法方法1:把这两个文件拷贝到操作系统的把这两个文件拷贝到操作系统的system32子目录中。子目录中。方法方法2:我的电脑我的电脑-属性属性-高级高级-环境变量环境变量-path-编辑,在编辑,在变量值中加入路径值变量值中加入路径值;新路径与已有路径间用;间隔。新路径与已有路径间用;间隔。2 2 存储过程存储过程l经编译和优化存储在经编译和优化存储在DBServer中的中的T-SQL语语句块,可被反复调用,运行效率高。句块,可被反复调用,运行效率高。

17、l不同数据库产品编写存储过程方法略有不同不同数据库产品编写存储过程方法略有不同lOracle:PL/SQLlMSSQLServer:T-SQL2.1 2.1 存储过程的定义和执行存储过程的定义和执行lSQLServer中存储过程的定义中存储过程的定义:CREATEPROCEDUREprocedure_nameparameterdata_type,ASDECLARE局部变量名局部变量名data_typesql_statementl执行存储过程执行存储过程EXECprocedure_nameparameter或者或者EXECUTEprocedure_nameparameter或者或者procedu

18、re_nameparameter2.2 2.2 局部变量局部变量l局部变量声明局部变量声明declarenamevarchar(8)l局部变量赋值局部变量赋值lsetname=Roselselectname=snamefromstudentwheresno=950012.3 2.3 控制结构控制结构l选择结构选择结构if.begin.endelse.l循环结构循环结构while.begin.end可使用可使用breakl多分支结构多分支结构casewhenthenwhenthenelseend示例:不带参数的存储过程示例:不带参数的存储过程createproceduretest1declare

19、nintwhile(1=1)-条件永远成立条件永远成立beginsetn=count(*)fromstumarkswhereexam10)updatestumarkssetexam=exam+2elsebreakend示例:带参数的存储过程示例:带参数的存储过程createproctest4namechar(10)asdeclareageintselectage=sagefromstudentwheresname=nameifage=20updatestudentsetsage=sage-1wheresname=nameelseupdatestudentsetsage=sage+1wheresname=nameselect*fromstudent上机作业上机作业l课本课本P258实验实验5要求在要求在vc6.0环境下,使用环境下,使用C编程实现对编程实现对SQLServer2000的访问。的访问。l针对针对SCDB,建立带参数的存储过程,用,建立带参数的存储过程,用户指定课程名和分数,统计选修该课程户指定课程名和分数,统计选修该课程且成绩大于指定分数的学生人数。且成绩大于指定分数的学生人数。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁