实验五嵌入式SQL.ppt

合集下载

嵌入式SQL

嵌入式SQL

嵌入式SQL嵌入式SQL语言把SQL语言嵌入到某种高级语言中使用,利用高级语言的过程性结构来弥补SQL语言实现复杂应用方面的不足。

这种方式下使用的SQL语言称为嵌入式SQL (Embedded SQL),而嵌入SQL的高级语言称为主语言或宿主语言。

1.1 嵌入式SQL的一般形式对宿主型数据库语言SQL,DBMS可采用两种方法处理,一种是预编译,另一种是修改和扩充主语言使之能处理SQL语句。

目前采用较多的是预编译的方法。

即由DBMS的预处理程序对源程序进行扫描,识别出SQL语句。

把它们转换成主语言调用语句,以使主语言编译程序能识别它,最后由主语言的编译程序将整个源程序编译成目标码。

在嵌入式SQL中,为了能够区分SQL语句与主语言语句,所有SQL语句都必须加前缀EXEC SQL.。

SQL语句的结束标志则随主语言的不同而不同。

例如在PL/1和C中以分号(;)结束;EXEC SQL <SQL 语句> ;在COBOL中以END-EXEC 结束;EXEC SQL < SQL 语句> END-EXEC例如一条交互形式的SQL语句:DROP TABLE Student ;嵌入到C程序中,应写成:EXEC SQL DROP TABLE Student ;嵌入SQL语句根据其作用的不同,可分为可执行语句和说明性语句两种。

可执行语句又分为数据定义,数据控制,数据操纵三种。

在宿主程序中,任何允许出现可执行的高级语言语句的地方,都可以写可执行SQL语句;任何允许出现说明型高级语言语句的地方,都可以写说明性SQL语句。

1.2 嵌入式SQL语句与主语言之间的通信将SQL嵌入到高级语言中混合编程,SQL语句负责操纵数据库,高级语言语句负责控制程序流程。

这时程序中会含有两种不同计算模型的语句,一种是描述性的面向集合的SQL语句,一种是过程性的高级语言语句,它们之间应该如何通信呢?数据库工作单元与源程序工作单元之间的通信主要包括:(1)向主语言传递SQL语句的执行状态信息,使主语言能够据此信息控制程序流程,主要用SQL通信区(SQL Communication Area ,简称SQLCA)实现;(2)主语言向SQL语句提供参数,主要用主变量实现;(3)将SQL语句查询数据库的结果交主语言进一步处理,主要用主变量和游标(Cursor)实现。

嵌入式SQL

嵌入式SQL

嵌入式SQL一、嵌入式SQL 简介嵌入式SQL(英文: Embedded SQL)是一种将SQL 语句直接嵌入到像C 、C++、JA V A 等程序设计语言中的方法。

借此方法,可使得应用程序拥有了访问数据以及处理数据的能力。

在这一方法中,将包含SQL 语言的程序设计语言成为称为宿主语言,简称主语言。

二、嵌入式SQL 的编写流程注:由于嵌入式SQL 的主语言有很多,关系型数据库也有很多,由于时间有限,我就不一一阐述了,这里我只以C 语言和Oracle 数据库为例进行说明,有兴趣的同学可以研究一下相关内容。

1.编写pc 源程序(包含SQL 语句的程序);2.使用Oracle 提供的预编译工具ProC.exe 将内嵌的SQL 语句转换为对Oracle 运行库函数( SQLLIB ) 的调用,并生成C 源代码文件;3.使用C /C++编译工具编译C/C++源文件,生成目标文件;4.使用C/C++链接工具生成可执行文件;5.运行可执行文件。

三、主语言与SQL 语句通信原理将SQL 嵌入到高级语言中混合编程,SQL 语句负责操作数据库,高级语言负责控制程序流程。

这时候程序中含有两种不同计算模型的语句,它们之间如何进行通信呢?1.SQL 语句如何向主程序传递执行状态信息?编写包含SQL 语句的程序***.pc 文件生成用RDBMS 提供的预编译工具编译***.c 文件嵌入式SQL 编写流程例如:在C语言中有这么一个功能需求,如果SQL语言执行成功,我就去执行下一行代码,否则我就退出。

这时就需要知道SQL语句的执行状态了。

在嵌入式SQL语言中,SQL语句是通过SQLCA(SQL通信区)向主程序传递其执行状态的,SQLCA里面有一个变量SQLCODE,根据这个变量,就可以知道SQL语句的执行状态。

如sqlca.sqlcode = 0 表明SQL语句执行成功;sqlca.sqlcode=1403,代表查询语句没有返回值;对于上面的案例,我们可以这样做:执行select * from student;If(sqlca.sqlcode ==0){Printf(“执行成功”);}else{Exit(0);}2.SELECT语句返回的结果怎么交给主程序,主程序如何向SQL语句传递参数。

嵌入式SQL实验指导

嵌入式SQL实验指导

实验6 嵌入式SQL通过这个实验,我们首先熟悉了嵌入式SQL编程,并可以自己动手编写一个小型的数据库应用程序。

而且能够大体了解我们平时在日常生活中看到的一些数据库应用程序是如何开发出来的。

做完这个实验,你会发现那些数据库程序也并不是十分高深。

这是我们最后一个实验,也是工作量最大的一个实验,大约需要2-3次实验课的时间。

希望同学们认真完成。

实验平台1.OS:WindowsXP2.DBMS:SQLServer2000piler:Visual C++ 6.0(大家可能没有接触过VC++,但并不妨碍我们做这个实验,因为在这个实验中我们只利用它的编译功能。

)预备知识1)嵌入式SQL编程:嵌入式SQL由SQL语句和C/C++代码组成。

其中SQL语句由预处理器翻译成C或C++的源代码。

对预处理后的源代码进行编译、连接生成可执行程序后方可运行。

●SQL预处理器SQLServer的预处理程序是nsqlprep.exe。

其常用的语法格式如下:nsqlprep 程序文档名⏹要求程序文档名的后缀为.sqc,可以省略。

⏹预编译后得到的文档,与程序文档同名,后缀为.c;放在与程序文档名同一个路径下nsqlprep.exe在SQLServer的安装目录的MSSQL\Binn下。

在本机中SQLServer的安装目录是C:\Program Files\Microsoft SQL Server,nsqlprep.exe在C:\Program Files\Microsoft SQL Server\MSSQL\Binn。

由于默认的安装方式(典型安装)并没有安装应用程序nsqlprep.exe,因此,需要你把我提供的binn文件夹,拷贝到该目录下覆盖原来的Binn。

●连接方式经预处理后的c文件就可以用c的编译器进行编译连接了。

使用Visual C++ 6.0进行编译连接,连接方式是动态连接,用到动态链接库SQLakw32.dll,sqlaiw32.dll;此两文件已经随同binn.rar的其他内容,被拷贝到C:\Program Files\Microsoft SQL Server\MSSQL\Binn下;但仍然需要把该路径加到系统的路径变量中,以使得程序运行时能找到这两个文件。

嵌入式SQL简介

嵌入式SQL简介
第3章 结构化查询语言SQL
5
不用游标的DML语句举例 不用游标的DML语句举例
〖例3 34〗根据宿主变量givensno的值在基本 〖例3-34〗根据宿主变量givensno的值在基本 表S中查询该学生的姓名、性别、年龄和系 别。
EXEC SQL SELECT 姓名,年龄,性别,系别 姓名,年龄,性别, INTO :sname,:sage,::ssex,department sname, sage,::ssex, FROM S WHERE S.学号=: givensno; S.学号=: givensno;
第3章 结构化查询语言SQL
8
不用游标的DML语句举例 不用游标的DML语句举例
〖 例 3 - 37 〗 把一名新生的记录插入基本表S 中 , 37〗 把一名新生的记录插入基本表 S 该生的简况由一组宿主变量 givensno sname、 sname、 sage、ssex、 department给出。 sage、ssex、 department给出。
第3章 结构化查询语言SQL
6
不用游标的DML语句举例 不用游标的DML语句举例
〖 例 3 - 35 〗 把基本表S 中计算机科学与工程系 35〗 把基本表 S 学生的年龄加上宿主变量raise的值。 学生的年龄加上宿主变量raise的值。
EXEC SQL UPDATE S SET 年龄=年龄+:raise 年龄=年龄+: FROM S WHERE S.系别=‘计算机科学与工程系’; S.系别=‘计算机科学与工程系’;
第3章 结构化查询语言SQL
10
嵌入式SQL的处理过程 嵌入式SQL的处理过程
• 嵌入式SQL的两种实现途径: 嵌入式SQL的两种实现途径:

实验五通过嵌入式SQL访问数据库

实验五通过嵌入式SQL访问数据库

数据库系统概论课程实验报告班级计科二班学号2013221104210076 姓名曹力一,各种方式简介ESQL嵌入式sql(embedded sql)是将sql语句嵌入到程序设计语言中,如C、C++和java,这些称之为主语言。

将sql嵌入到高级语言中,sql负责数据的处理,高级语言负责程序的控制。

这时候程序会有两种不同的计算机模型语言,两者是如何通信呢?1、向主语言传递sql执行的状态信息,主语言通过此信息来控制程序流程。

主要通过SQL通信区(SQL Communication Area)SQLCA实现,SQLCA中有一个变量SQLCODE用来存放执行SQL所返回的代码,成功则返回预定义代码SUCCESS,否则返回错误代码。

2、主语言提供参数,主要用主变量(Host Variable)实现。

主变量按功能不同可以分为,输入主变量和输出主变量。

一个主变量附带一个指示变量,它可以检查变量是否为空值,是否被截断。

3、SQL将查询的结果交给主语言处理,主要通过主变量和游标实现。

SQL是面向集合的,一条sql可能产生多条记录。

而主语言是面向记录的,一组主变量只能处理一条记录。

所以游标的得来就是处理SQL得到的数据集合,让其指向某一条记录。

特点⏹⒈综合统一⏹ 2. 高度非过程化⏹ 3. 面向集合的操作方式⏹ 4. 同一种语法结构提供两种使用方式⏹ 5. 语言简捷,易学易用三、PL/SQLPL/SQL(procedural language/SQL)是编写数据库存储过程的一种过程语言。

它结合了SQL的数据操作能力和过程话语言的流程控制能力,是SQL的过程化扩展。

格式如下:create procedure 过程名(参数1,参数2,……)s<PL/SQL>块;优点:⏹a提供了在服务器端快速执行SQL语句的有效途径⏹降低了客户机和服务器间的通信量⏹有利于集中控制⏹方便维护四、ODBCODBC可以连接不同的RDBMS,是微软公司开放服务体系中有关数据库的一个组成部分,它建立了一组规范,并提供了一组访问数据库的标准API。

第8章SQL嵌入式编程PPT教学课件

第8章SQL嵌入式编程PPT教学课件

<% Dim UNM,PWD
UNM=Request.Form(“T1”)
PWD=Request.Form(“T2”)
Response.write “您输入的用户名是” & UNM
Response.write “您输入的密 码是” & PWD
2020/12/0%9 >
4
ASP与Access数据库的连接
“Database=数据库名;UID=用户名;PWD=密码” • 注1:Server与Data Source参数意义等效; • 注2: Database与Initial Catalog参数意义等效
2020/12/09
6
ASP与Text文本数据的连接
• SET 库对象名=Server.CreateObject(“ADODB.Connection”)
对于GET方法:
<% Dim UNM,PWD
UNM=Request.QueryString(“T1”)
PWD=Request.QueryString(“T2”)
Response.write “您输入的用户名是” & UNM
Response.write “您输入的密 码是” & PWD
%>
或对于POST方法:
• 或库对象名.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & “Data Source=” & Server.Mappath(“Text数据名”) & “;Extended Properties‘text;FMT=Delimited’”
2020/12/09
7
ASP与电子表的连接
• 或库对象名.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & “Data Source=” & Server.Mappath(“数据库名”)

嵌入式SQL

嵌入式SQL

(3)卷游标的定义和使用
Relative 3:表示把游标从当前位置推进3行; Relative -5:表示把游标从当前位置返回5 行; Absolute 4:表示把游标移向查询结果的第 4行; Absolute -6:表示把游标移向查询结果的 倒数第6行;
存储过程
Stored Procedure
活动集: 活动集:select语句返回的元组的集合。 当前行: 当前行:活动集中当前处理的那一行。游标即是指向当前行 的指针。 游标分类: 滚动游标:游标的位置可以来回移动,可在活动集中取任 意元组。 非滚动游标:只能在活动集中顺序地取下一个元组。 更新游标:数据库对游标指向的当前行加锁,当程序读下 一行数据时,本行数据解锁,下一行数据加锁。
(3)卷游标的定义和使用
卷游标的打开和关闭与以前一样。 卷游标的推进语句: 2)卷游标的推进语句: EXEC SQL FETCH [NEXT | PRIOR | FIRST | LAST | CURRENT | RELATIVE N | ABSOLUTE M] <游标名> INTO <宿主变量表> END_EXEC
存储过程——功能
允许多个(有权)用户访问相同的代码 提供一种集中且一致的实现数据完整 性逻辑的方法 是C/S的重要组成部分 用于
频繁使用的查询 业务规则 被其他过程使用的公共例行程序
存储过程——分类
系统存储过程
sp_
用户定义的存储过程
存储过程
CREATE PROCEDURE ProductType (IN product_id INT, OUT type CHAR(10)) BEGIN DECLARE prod_name CHAR(20); SELECT name INTO prod_name FROM "DBA"."product" WHERE id = product_id; CASE prod_name WHEN 'Tee Shirt' THEN SET type = 'Shirt' WHEN 'Sweatshirt' THEN SET type = 'Shirt' WHEN 'Baseball Cap' THEN SET type = 'Hat' WHEN 'Visor' THEN SET type = 'Hat' WHEN 'Shorts' THEN SET type = 'Shorts' ELSE SET type = 'UNKNOWN' END CASE; END

实验五、通过嵌入式SQL访问数据库 (2)

实验五、通过嵌入式SQL访问数据库 (2)

实验报告单院(系):计算机学院专业:计算机科学与技术(嵌入式方向)班级:12计科5班姓名:陶昕星学号:34同组人:实验室:S4305组号:日期: 4.25课程:数据库原理指导教师:邱长春成绩:实验项目编号:05 实验项目名称:嵌入式SQL 一、实验目的1.熟悉通信区、游标的概念;2.理解嵌入式SQL的处理过程;3.For personal use only in study and research; not for commercial use4.5.掌握SQL与主语言之间的通信机制;6.熟悉通过嵌入式SQL访问数据库二、实验环境For personal use only in study and research; not for commercial useSQL Server2000三、实验学时2学时四、实验内容及步骤1. 查看SQL Server的参考文献,找出嵌入式SQL编程所需的各种组件,如下图所示:2.通过自定义的方式安装SQL Server,确保上述组件安装成功,并找出这些组件所在的目录路径,如下面的图示:3.创建一个数据库,本例的数据库为stu,并将其密码设置为sa;4.使用文本编辑器编写一个嵌入式SQL程序,扩展名为sqc。

本例的嵌入式SQL程序名称为EmbedSql.sqc,程序如下:#include <stdio.h>#include <stdlib.h>EXEC SQL INCLUDE sqlca;{EXEC SQL BEGIN DECLARE SECTION;//主变量char lname[40];char fname[20];EXEC SQL END DECLARE SECTION;printf("This is my Embedded SQL for C application\n");EXEC SQL CONNECT TO WIN-CF7AKA VRCJA.pubs USER sa.sa;//连接到数据库if (SQLCODE == 0){printf("Connection to SQL Server established\n");}else{// 连接DBMS错误printf("ERROR: Connection to SQL Server failed\n");return (1);}EXEC SQL DECLARE selCursor CURSOR FORSELECT au_lname, au_fnameFROM authors;EXEC SQL OPEN selCursor ;for ( ; ; ) {/* Fetch next row of the result table */EXEC SQL FETCH selCursor INTO :lname,:fname;if (SQLCODE == 0){printf("lname:%s/n",lname);printf("fname:%s/n",fname);}elsebreak;/* display data */}printf ("SQL error %d\n",sqlca->sqlcode);//若照书上写sqlca.sqlcode编译报语法错done:/* Close the cursor before completing*/EXEC SQL WHENEVER SQLERROR continue;EXEC SQL CLOSE providerCursor;EXEC SQL COMMIT WORK RELEASE;//断开连接EXEC SQL DISCONNECT ALL;return 0;}5. 实例工程的构建:(1)打开VC6.0,新建名为esqlea1的WIN32 Console Application工程文件;(2)把EmbedSql.sqc拷贝到工程的目录文件夹下;(3)将上述组件拷贝到工程的目录文件夹下;(4)在工具菜单下选择Options,再选择Directories,在Show Directories for 下拉框中选择Include files,在Directories编辑框中输入SQLServer开发工具的头文件路径;选择library files,在Directories编辑框中输入SQLServer开发工具的库文件路径;选择可执行文件,在Directories编辑框中输入SQLServer开发工具的可执行文件路径。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.3 给出的程序中将程序连接到服务器上的pubs数据 库上,查询满足以下SELECT语句的数据信息:
select EmployeeID from orders where OrderID = 345 查询得到的结果由主变量EmployeeID传给主语言(C
语言),C语言得到数据信息后打印输出
实验五 嵌入式SQL (2学时)
1、实验目的
熟悉通过嵌入式SQL(主语言为C语言)编程 访问数据库
理解嵌入式和自含式SQL语句的区别
2、实验平台
2.1 操作系统:
Windows 2000或者Windows XP
注:学生实验系统可以采用SQL SERVER2000个人版,如果采用SQL SERVER2000服务器版本,则必须使用windows2000 server
4、实验报告
包括以下几部分内容:
题目、姓名、日期、实验环境、实验内容与完成 情况、出现的问题、解决方案(列出遇到的问题 和解决办法,列出没有解决的问题)
运行 SQLServer的预处理程序是nsqlprep.exe,经预处理后的c
文件就可以用c的编译器进行编译连接了
实验内容及要求(续)
3.2 嵌入式SQL的使用,将SQL嵌入到C语言中,在SQL的数据 库中通过SELECT语句获取数据,并将获得的信息通过主变量传 递给主语言并打印输出
实验内容及要求(续)
2.2 数据库管理系统: SQL SERVER2000个人版
3、实验内容及要求
3.1 通过C语言编写访问数据库的应用程序来对/C++代码组成 SQL语句由预处理器翻译成C或C++的源代码 预处理后的源代码进行编译、连接生成可执行程序后方可
相关文档
最新文档