C语言数据库应用程序开发.ppt_第1页
C语言数据库应用程序开发.ppt_第2页
C语言数据库应用程序开发.ppt_第3页
C语言数据库应用程序开发.ppt_第4页
C语言数据库应用程序开发.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c语言数据库应用程序开发,数据库原理和应用-基础开发技术实践,电子工业出版社,本章内容,9.1嵌入式sql语言的一些概念1 .嵌入式sql语句嵌入式sql语句是指应用程序中的sql语句该应用程序称为主机程序或主机程序,写该程序的语言称为主机语言或主机语言。2 .执行SQL语句和嵌入在执行SQL语句中的SQL语句主要有两种:执行SQL语句和执行SQL语句。 使用执行SQL语句连接到数据库,定义、查询、操作数据库中的数据,实际操作数据库,执行完成后,将执行信息存储到通信区域。 描述语句用于描述通信区域和SQL语句中使用的变量。 说明文不生成执行代码,不影响通信区域。 3 .事务是一组逻辑上相关的S

2、QL语句。 数据库把这些视为一个单元。 为了维持数据库的一致性,是否执行了事务中的所有操作? 嵌入式SQL也能很好地支持事务。在9.1.1语言程序中嵌入SQL语句的程序开发环境的构筑,本章的配置是在安装Visual C 6.0和SQL Server 2000的基础上进行的,在配置的过程中必须使用SQL Server 2000安装CD,做好准备。 (1)准备编译所需的头文件和库文件。 (2)准备开发工具。 (初始化SQL Server的预编译环境。 (初始化Visual C编译器环境。 9.1.2首先是在c语言程序中嵌入SQL语句的程序,(1)编辑源代码。 宣告不执行# includevoidm

3、ain () /esqlbegindeclaresection的嵌入式SQL变数char first_name40; char last_name=White ; exec SQL最终删除部分; /使用用户名sa和密码123执行连接到localhost主机上的Pubs数据库execsqlconnecttolocalhost.pubs用户sa.123的/sql语句, execsqlselectau_fname into : first_namefromauthorswhereau _ lname=: last _ name,将查询的au _ fname字段的内容存储在first _ name中;

4、 断开exec SQL disconnect all/first_name的内容打印( first name : % sn ,first _ name ); ,(2)事先编译该SQC文件。 (请注意,必须使用Visual C 6.0打开demo.c文件,编译和链接该文件,并将头文件和相关库文件添加到项目中。 9.2从生成SQL语句的观点出发,将静态SQL语句、嵌入式SQL语句分类为静态SQL语句和动态SQL语句。 确定了静态SQL语言,即编译时引用的表和列。 宿主变量不改变表和列信息。 可以使用主变量更改查询的参数值,但不能用主变量替换表名或列名。 声明9.2.1嵌入式SQL语句中使用的c变量

5、。 1 .声明方法主变量(Host Variable )是一个程序变量,它引用嵌入式SQL语句中的主语言描述。 例如: EXEC SQL BEGIN DECLARE SECTION; char first_name50; char last_name=White ; exec SQL最终删除部分; execsqlselectau _ fname into : first _ namefromauthorswhereau _ lname=: last _ name; 、2 .主变量的数据类型主变量用编程语言的数据类型进行说明,用主变量保存用编程语言处理的程序变量embeddedsql语句从数据库

6、中取出的数据。 因此,嵌入式SQL语句必须小心地选择主变量的数据类型,因为c数据类型必须映射到适当的DBMS数据类型。3 .主变量和NULL因为大多数编程语言(例如c )不支持NULL,所以NULL处理必须在SQL中进行。 可以使用“主机指示器变量”(Host Indicator Variable )来解决此问题。 在嵌入式sql语句中,主变量和指示符变量指定单独的sql类型值。 例如,连接到excesqlselectpriceinto : price : price _ nullflagfromtitleswhereau _ id= MC 3026 ,9.2.2数据库,并在程序中使用CONN

7、ECT TO语句此语句的完整语法是connect to server _ name. database _ name as连接_ name user log in .password |$ integrated 。 (1) server_name是服务器名称。 如果省略,则为本地服务器名称。 (2) database_name是数据库名称。 (3) connection_name是连接名称。 可选。 如果只有一个连接,则不需要指定连接名称。 可以使用SET CONNECTION来使用不同的连接。 (4)登录是登录名。 (5)密码是密码。 嵌入式SQL语句使用DISCONNECT语句断开数据库的

8、连接。 语法是disconnect connection _ name|all|current 。 connection_name是连接名称,ALL表示要断开所有连接: CURRENT :断开当前连接。 以下是一些示例说明CONNECT和DISCONNECT语句的使用方法。 execsqlconnecttoscaffe.pubs caffe1usersa; execsqlconnecttotlatte.pubs latte1usersa; 执行SQL set连接caffe 1; execsqlselectnamefromsysobjectsinto : name; 执行SQL set连接率1;

9、 execsqlselectnamefromsysobjectsinto : name; EXEC SQL DISCONNECT caffe1; EXEC SQL DISCONNECT latte1; 9.2.3数据的查询和更新可以使用SELECT INTO语句查询数据,并将数据存储在主变量中。 例如,execsqlselectau _ fname into : first _ namefromauthorswhereau _ lname=: last _ name; 删除数据使用与transact-SQL DELETE语句的语法类似的delete语句。 例如,excessqldeletefr

10、omauthswhereau _ lname=white,更新数据使用UPDATE语句。 此语法是transact-SQL update语句的语法。 例如,execsqlupdateauthorssetau _ fname=fredwhereau _ lname=white使用INSERT语句(Transact-SQL的INSERT语句的语法)插入新数据,例如, execsqlinsertintohomesales (seller _ name,sale_price) real_estate(Jane Doe,180000.00 ); 9.2.4 SQL通信区域,DBMS经由SQLCA(SQL

11、通信区域)向应用程序报告执行错误信息。 SQLCA是包含错误变量和状态指示符的数据结构。 通过检查SQLCA,应用程序可以检查嵌入式SQL语句是否成功,并根据是否成功来确定是否继续执行。 您可以在程序中使用EXEC SQL INCLUDE SQLCA通知SQL预编译器包括SQL通信区域。 不写也没关系。 SQLCA结构会自动添加。 1.SQLCODE SQLCA结构的最重要部分是SQLCODE变量。 每次执行嵌入式SQL语句时,DBMS都会将SQLCA设置为变量SQLCODE的值,以指示语句的完成状态。 (1) 0:此语句正常执行,没有错误或报警。 (2) 0:显示了报警信息。2.SQLSTA

12、TE SQLSTATE变量也是SQLCA结构的成员。 与SQLCODE一样,返回错误消息。 SQLSTATE在SQLCODE之后生成。 用户可以使用WHENEVER语句通知预编译器如何处理以下三个异常: wheneversqlerroraction :如果在执行SQL语句时检测到错误信息,则执行action,action包含用于处理错误的代码(SQLCODE0)。 wheneversqlwarningaction :如果在执行SQL语句时显示警告消息,则表示将执行aciton。 动作包含处理警告的代码(SQLCODE=1)。 whenever not found :如果在执行SQL语句时找不到

13、适当的元组,则表示将执行action。 操作包含用于处理未检测到的内容的代码(SQLCODE=100 )。 对于上述三个异常,用户可以指定预编译器采取以下三种动作。 WHENEVERGOTO :通知预编译器生成转发语句。 WHENEVERCONTINUE :通知预编译器将程序的控制流到下一个主语言文句中。 WHENEVERCALL :向预编译器通知函数调用。其完整语法如下。 whever SQL warning continue goto stmt _ label 调用函数() ,例如execsqlwheversqlerrorgotoerrormessage 1; execsqldeletef

14、romhomesaleswhereequity 10000; execsqldeletefromcustomerlistwheresalary 40000; execsqlwheneversqlerrorcontinue; execsqlupdatehomesalessetequity=equity-loan revalue; execsqlwheversqlerrorgotoerrormessage 2; execsqlinsertintohomesales (seller _ name,sale_price) real_estate(Jane Doe,180000.00 ) error m

15、essage 1: printf ( sqldeleter exit (); 错误消息2:打印机( sqlinserterror : % LDn,sqlcode ); exit (); 9.3动态SQL语句和动态SQL语句在执行程序时提供,而不是在编译时确定SQL的表和列,并将SQL语句的文本传递给DBMS来执行。 静态SQL语句在编译时生成了执行计划。 动态SQL语句仅在运行时生成执行计划。 动态SQL必须从功能和处理的角度从动态更改和动态查询两方面来解释。 9.3.1动态更改,并使用PREPARE和EXECUTE语句动态更改。 PREPARE语句是动态SQL语句特有的语句。 语法是接受包含

16、PREPARE语句名称FROM主变量SQL语句的主变量并将其传递给DBMS的语句。 DBMS编译语句并生成执行计划。 字符串中有“? 在执行语句时,DBMS会将这些“? 而需要参数来代替。 PREPRARE执行的结果,DBMS给准备的语句赋予了文件名。 文件名类似于光标名称,是SQL标识符。 执行SQL语句时,EXECUTE语句后面跟着语句名。 例如,EXEC SQL BEGIN DECLARE SECTION; char prep = insert into MF _ table values (? 什么?什么?; char name30; char car30; 双数字; exec SQL

17、最终删除部分; execsqlprepprep _ statfrom : prep; while (SQLCODE=0) strcpy(name, Elaine ); strcpy(car, Lamborghini ); num=4.9; execsqlexecuteprep _ status ing : name,car,num; ,9.3.2动态游标,游标分类为静态游标和动态游标。 对于静态游标,在定义游标时会确定完整的SELECT语句。 动态光标和静态光标不同。 1 .声明光标声明光标使用DECLARE CURSOR。 下面是静态SQL声明游标。 execsqldeclarec1cursorforselect * fromstatff; 例如execsqlprepstmtlfrm:stringstmt; EXEC SQL DECLARE C2 CUSOR FO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论