第一篇:网络数据库讲稿(客户端开发编程)
网络数据库讲稿(14)
3/26/2013 SQL Server客户端开发与编程
一、引言
1.编程模式:C/S模式和B/S模式。
2.客户端编程语言:ASP,VB,VC,VFP,PB,Delphi,Access,ASP,JSP等,都可访问SQL数据库。3.可访问多种数据库。
二、数据库编程接口
1.ODBC ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。
ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由ODBC驱动程序完成。也就是说,不论是FoxPro、Access , MYSQL还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
2.OLE DB OLE DB(Object Linking and Embedding,对象连接与嵌入),简称OLE技术;DB(data base)。
OLE DB(OLEDB)是微软的战略性的通向不同的数据源的低级应用程序接口。OLE DB不仅包括ODBC的结构化查询语言(SQL)能力,还具有面向其他非SQL数据类型的通路。作为微软的组件对象模型(COM)的一种设计,OLE DB是一组读写数据的方法。
3.ADO ADO(ActiveX Data Objects)是微软公司的一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个桥梁。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。
ADO是一种面向对象的编程接口,是一个能够访问不同数据库的统一接口,它在OLE DB中提供了一种“桥”程序,这种程序能够提供对数据库的连接。开发人员在使用ADO时,其实就是在使用OLE DB,不过OLE DB更加接近底层。
4.三种接口之间的关系
ODBC是Microsoft引进的一种早期数据库接口技术。它实际上是ADO的前身。早期的数据库连接是非常困难的,每个数据库的格式都不一样,开发者得对他们所开发的每种数据库的底层API有深刻的了解,因此,能处理各种各样数据库的通用的API就应运而生了,也就是现在的ODBC(Open Database Connectivity)。ODBC是人们在创建通用API的早期产物,有许多种数据库遵从了这种标准,被称为ODBC兼容的数据库。
网络数据库讲稿(14)
3/26/2013 OLEDB位于ODBC层与应用程序之间。在一些应用中,例如ASP、Delphi,ADO是位于OLEDB之上的“应用程序”。ADO调用先被送到OLEDB,然后再交由ODBC处理。
三、常用ADO对象方法和属性
1.Connection对象
P214, P220 2.Command对象
P214, P227 3.Recordset对象
P215, P220
四、用其它语言访问SQL数据库
ASP,VB,VC,VFP,PB,Delphi,Access,ASP,JSP等,都可访问SQL数据库。
以下仅介绍ASP、VFP、Delphi。五.ASP访问SQL数据库
1.常用ASP内建对象 Request Response Application Session Server 2.建立访问环境
可使用OLE DB或ODBC。
(1)建立使用OLE DB的访问环境
需要在“程序/管理工具/Internet服务器管理”中,右击“默认Web站点”,再单击“属性”,然后设置“主目录”和“文档”。(如P218图6.8)(2)建立使用ODBC数据源的环境
需要在“程序/管理工具/数据源(ODBC)”中配置,在DNS配置框中选“使用用户输入登录ID和密码的SQL Server验证”。P213 3.连接到数据源 P214 在ASP中引用ADO对象,要加前缀ADODB。(1)创建一个ADO Connection对象。例如:
Set cn=Server.CreateObject(“ADODB.Connection”)(2)连接到数据源
①使用OLE DB接口
首先指定OLD DB提供者 例:
cn.Provider=”sqloledb” 再连接到数据源 例:
cn.Open “Server=zyxy;Database=教学管理;uid=sa;pwd=‟‟”
网络数据库讲稿(14)
3/26/2013 ②使用ODBC数据源 例:
cn.Open “dsn=jxgl;uid=sa;pwd=‟‟”
„jxgl是2(2)中建立的数据源
4.执行访问数据源的命令并创建结果集对象
例:
set rs=cn.Execute(“select * from 学生 where 性别=‟男‟”)5.关闭连接
例: rs.close cn.close 6.应用举例
例6.1
P221 用cn.Excute创建的Recordset对象,在结果集中只能用MoveNext逐步向尾部单方向移动记录指针。还有另一种方法创建Recordset对象:P222L18。用此种方法创建的Recordset对象的Open方法有四个参数。
六、在客户端用VFP访问网络数据库SQL Server上的数据库(一)在客户端设置ODBC: 在本地机上:
开始/设置/控制面板/管理工具/数据源(ODBC)在此添加数据源,命名数据源名(假定命名为jxgl),填写服务器名,使用SQL Server验证,更改默认的数据库。
附:可继续完成以下设置: 在客户端VFP环境下打开项目管理器(项目中至少应有一个数据库),展开数据库,选择连接,单击新建按钮,打开连接设计器对话框,填写有关内容(也可以打开一个数据库,用create connection命令打开连接设计器对话框),最后在保存对话框输入连接名(假定为LJ)。该连接还可使用以下命令建立:
CREATE CONNECTION <连接名> DATASOURCE <数据源名> USERID
DATABASE “教学管理”
(二)在客户端VFP中使用SPT(SQL Pass Through)技术
1.连接数据源
<连接句柄变量名>=SQLConnect(<数据源名>,
dh=SQLCONNECT(“LJ”,”sa”,””)也可使用
<连接句柄变量名>=SQLStringConnect(“dsn=<数据源名>;uid=
pwd=<帐户密码>”)例如
dh=SQLStringConnect(“dsn=LJ;uid=sa;pwd=”)如果连接成功,dh返回正整数句柄,失败返回-1。
附:也可以使用命令 <连接句柄变量名>=SQLConnect(<连接名>)例:DH=SQLConnect(“LJ”)2.执行SQL命令
SQLEXEC(<连接句柄变量名>,
网络数据库讲稿(14)
3/26/2013 在查询命令中添加READWRITE关键词,可得到可读写的临时表。可用SQLCOMMIT(DH)、SQLROLLBACK(DH)提交或回滚事务。3.断开连接
SQLDISCONNECT(DH)
七、Delphi访问SQL数据库
1.ADO控件
P304 2.使用TADODataSet访问SQL数据库
第二篇:网络数据库讲稿(查询)
网络数据库讲稿
一、简单的SELECT
P95 1.SELECT … FROM …(1)DISTINCT(2)TOP n [PERCENT](3)字段别名
有三种书写格式。
2.WHERE子句(SELECT … FROM … WHERE …)
P101(1)比较运算符(2)逻辑运算符
(3)范围运算符BETWEEN(4)列表(包含)运算符 IN(5)字符匹配运算符LIKE及通配符(6)空值NULL 3.ORDER BY子句(SELECT … FROM … WHERE … ORDER BY …)
P107 ORDER BY子句必须放在SELECT语句的最后。
4.GROUP BY子句(SELECT … FROM … WHERE …GROUP BY … ORDER BY …)P109(1)GROUP BY子句中的列名必须是原表中的列名,不能是别名。(2)当SELECT子句中有聚合函数时,GROUP BY子句实现分组统计。
(3)当SELECT子句中同时有字段名列和聚合函数列时,必须使用GROUP BY子句。例如
select 班级,SUM(已修学分)from 学生GROUP BY 班级
(4)在SELECT子句中出现的列名必须出现在GROUP BY子句中、或聚合函数中。GROUP BY子句中的列名则不一定出现在SELECT子句中。(5)ROLLUP返回第一个分组列的统计行。例如:
select 班级,性别,SUM(已修学分)from 学生GROUP BY 班级,性别WITH ROLLUP(6)CUBE是ROLLUP的扩展。(7)ALL短语
P109 select 班级,性别,SUM(已修学分)from 学生
WHERE已修学分>4 GROUP BY ALL 班级,性别
ALL不能与WITH同用。6.HAVING子句
(SELECT … FROM … WHERE …GROUP BY … HAVING … ORDER BY …)P111(1)HAVING应与GROUP BY配对使用,否则没必要使用。(2)HAVING的主要作用是第二次筛选。
(3)HAVING中可以包含聚合函数(WHERE中不可以)。
(4)HAVING中非聚合函数中的字段名,必须出现在GROUP BY中。(5)SELECT列表中命名的别名,不能在HAVING中使用。7.COMPUTE子句,按排序字段分组求和。
SELECT 姓名,分数FROM 学生,成绩WHERE 学生.学号=成绩.学号 ORDER BY 姓名COMPUTE SUM(分数)
SELECT 姓名,分数FROM 学生,成绩WHERE 学生.学号=成绩.学号 ORDER BY 姓名COMPUTE SUM(分数)BY 姓名
网络数据库讲稿
SELECT 姓名,分数FROM 学生,成绩WHERE 学生.学号=成绩.学号 ORDER BY 姓名COMPUTE SUM(分数)BY 姓名COMPUTE SUM(分数)
Compute By 必须与 Order By 子句一起使用,而且Compute By 子句中的统计列名列表也必须与之相同。
8.SELECT INTO,将查询结果保存到永久表中。
P136
二、多表查询
P112 1.内、外连接
内外连接中用ON<条件> 2.交叉连接
交叉连接中用WHERE<条件>,用WHERE<条件>的交叉连接等同于内连接。3.合并两个查询
(1)联合查询
P120 SELECT 员工编号,员工姓名,'员工信息表' FROM 员工信息WHERE 所任职位='经理' UNION SELECT 部门编号,部门名称,'部门信息表' FROM 部门信息
(2)INTERSECT
P305 SELECT 学号FROM 成绩表 INTERSECT SELECT 学号FROM 学生信息
(3)EXCEPT SELECT 学号FROM 学生信息 EXCEPT SELECT 学号FROM 成绩表
三、子查询
P121
第三篇:网络数据库讲稿(触发器)
网络数据库讲稿
3/26/2013
触发器
P191
一、触发器概述
1.是一种特殊的存储过程。
2.不能被显式调用,只能由一些特定的操作(命令)引发(激活),这些命令是:INSERT、DELETE、UPDATE、CREATE、ALTER、DROP、GRANT、DENY、REVOKE等。3.每个触发器由三部分组成
①触发器名称:命名规则与变量名、存储过程名相同; ②激活该触发器的操作(命令动词)。③一个存储过程。
4.使用触发器可强制实现数据的一致性和完整性。
二、触发器的分类(按引发命令分类)及其工作原理
1.DML触发器(表级)(1)触发器必须依附于某一个表(触发器必须被包含在某一个表中)。(2)激活该触发器的操作:可以是INSERT、DELETE、UPDATE之一。(3)当上述操作发生在包含触发器的表上时,触发器中的过程被自动执行。(4)支持两种类型的触发器: ①AFTER 可以为同一表的同一操作定义多个该类型的触发器,并可定义执行顺序; ②INSTEAD OF 同一表的同一操作只能定义一个该类型的触发器。(5)工作原理
P193 临时逻辑表INSERTED和DELETED。2.DDL触发器(数据库级和服务器级)(1)触发器必须依附于某一个数据库(触发器必须被包含在某一个数据库中)。
(2)激活该触发器的操作:可以是CREATE、ALTER、DROP、GRANT、DENY、REVOKE等之一。
(3)当上述操作发生在包含触发器的数据库上时,触发器中的过程被自动执行。(4)只有AFTER型触发器。
三、创建DML触发器
P194 用命令CREATE TRIGGER创建 例: 1.
CREATE TRIGGER 增加学生学分 ON 成绩
//只能增加一条记录
FOR INSERT AS DECLARE @XH CHAR(6),@KCH CHAR(8),@FS DECIMAL(4,1)SELECT @XH=学号,@KCH=课程编号,@FS=分数 FROM INSERTED IF @FS>=60
网络数据库讲稿
3/26/2013
UPDATE 学生 SET 已修学分
=已修学分+(SELECT 学分 FROM 课程 WHERE 课程编号=@KCH)
WHERE 学号=@XH 2.
CREATE TRIGGER 减少学生学分 ON 成绩 FOR DELETE AS UPDATE 学生 SET 已修学分=已修学分-(SELECT SUM(学分)FROM 课程 WHERE 课程编号 IN(SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60))WHERE EXISTS(SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60)3.CREATE TRIGGER 修改学生学分 ON 成绩 FOR UPDATE AS UPDATE 学生 SET 已修学分=已修学分-(SELECT SUM(学分)FROM 课程 WHERE 课程编号 IN(SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60))WHERE EXISTS(SELECT DISTINCT 课程编号 FROM DELETED WHERE 学生.学号=DELETED.学号 AND 分数>=60)UPDATE 学生 SET 已修学分=已修学分+(SELECT SUM(学分)FROM 课程WHERE 课程编号 IN(SELECT DISTINCT 课程编号 FROM INSERTED WHERE 学生.学号=INSERTED.学号 AND 分数>=60))WHERE EXISTS(SELECT DISTINCT 课程编号 FROM INSERTED WHERE 学生.学号=INSERTED.学号 AND 分数>=60)
4.“修改学生学分”也可改为:
CREATE TRIGGER 修改学生学分 ON 成绩 FOR UPDATE AS UPDATE 学生 SET 已修学分=(SELECT SUM(学分)FROM 课程 WHERE 课程编号 IN
网络数据库讲稿
3/26/2013(SELECT 课程编号 FROM 成绩
WHERE 学生.学号=成绩.学号 AND 分数>=60))
然后可执行下列命令,并检验执行结果。
--INSERT INTO 成绩 VALUES('200202','L2020308',83)--INSERT INTO 成绩 VALUES('200202','L2030501',80)--INSERT INTO 成绩 VALUES('200202','L2030506',75)--DELETE FROM 成绩 WHERE 学号='200202' AND LEFT(课程编号,1)='L'--UPDATE 成绩 SET 分数=80 WHERE 学号='200202' AND LEFT(课程编号,1)='L'
四、创建DDL触发器
P198 例: 1.P199 2.CREATE TRIGGER 禁删数据库ON ALL SERVER FOR DROP_DATABASE AS PRINT '请不要删除数据库!' ROLLBACK TRANSACTION
DROP DATABASE 订货管理
五、嵌套触发器和递归触发器
P199, P200
六、管理触发器
P201 1.查看 2.修改 3.禁用 4.删除
--根据成绩表计算每个学生的已修学分
update 学生set 已修学分=(select sum(学分)from 课程 where 课程编号in(select 课程编号from 成绩where 学生.学号=成绩.学号 and 分数>=60))
--修改插入触发器,使得向成绩表中插入多条记录,也能成功执行 CREATE TRIGGER 插入学生学分ON 成绩 FOR insert
网络数据库讲稿
3/26/2013 AS UPDATE 学生SET 已修学分=已修学分+(SELECT SUM(学分)FROM 课程 WHERE 课程编号IN(SELECT DISTINCT 课程编号FROM inserted WHERE 学生.学号=inserted.学号AND 分数>=60))WHERE EXISTS(SELECT DISTINCT 课程编号FROM inserted WHERE 学生.学号=inserted.学号AND 分数>=60)
select * from 成绩
select 学号,已修学分from 学生
INSERT INTO 成绩VALUES('200202','L2020308',83)INSERT INTO 成绩VALUES('200202','L2030501',80)INSERT INTO 成绩VALUES('200202','L2030506',75)INSERT INTO 成绩VALUES('200201','L2020308',83)INSERT INTO 成绩VALUES('200201','L2030501',80)INSERT INTO 成绩VALUES('200201','L2030506',75)
select * into 备份成绩from 成绩 //备份成绩表 select 学号,姓名,已修学分from 学生
insert into 成绩 select * from 成绩
INSERT INTO 成绩VALUES('200212','L2030506',75)
第四篇:网络数据库讲稿(复制)
网络数据库讲稿
4/20/2013
一、复制的基本概念
SQL Server复制是在数据库之间对数据和数据库对象进行复制和分发并且对于数据的修改进行同步,以确保其一致性的一组技术。使用复制可以将数据分发到不同位置,通过局域网、Internet分发给多个远程服务器站点;还可将多个用户和站点的数据进行合并。
二、复制模型
复制技术采用发布(出版)——订阅模型分发数据。
SQL Server复制模型由下列对象组成:发布服务器,分发服务器,订阅服务器,发布,项目,订阅。还有几个负责在发布服务器和订阅服务器之间复制和移动数据的复制进程:快照代理程序,分发代理程序,日志读取器代理程序,队列读取器代理程序,合并代理程序。1.服务器角色
参与复制的服务器根据任务不同可划分为以下角色: ①发布服务器:数据源所在的服务器。
②分发服务器:将出版物从发布服务器移动到订阅服务器。③订阅服务器 2.项目
3.发布(出版物)4.订阅 5.复制的类型 ①快照复制 ②事务复制 ③合并复制 6.复制代理程序
①快照代理程序:与所有复制类型一起使用。
②分发代理程序:与快照复制和事务复制一起使用。③合并代理程序:与合并复制一起使用。
④日志读取器代理程序:与事务复制一起使用。
⑤队列读取器代理程序:与快照复制或事务复制一起使用。
三、服务器的连接方式
1.发布服务器与分发服务器为同一物理服务器 2.发布服务器与分发服务器为不同物理服务器 3.发布者与再次发布者连接方式
4.多发布服务器单订阅服务器连接方式
四、配置复制
复制一般包括以下几个阶段:配置发布和分发,生成和应用初始快照,修改复制数据,同步和传播数据。
复制过程中各代理程序的调度由SQL Server Agent服务管理,应配置SQL Server Agent服务能够在系统启动的时候自动启动,并且在意外停止时能够自动重新启动,由于复制操作跨越多个服务器传输数据,所以SQL Server Agent服务的启动帐号应使用域用户帐号。1.配置分发服务器
网络数据库讲稿
4/20/2013 分发服务器是快照复制和事务复制的首要组件。在企业管理器中运行向导,右击【复制】,单击【配置发布、订阅服务器和分发】启动【配置发布和分发向导】。然后按提示进行。
配置完成后,系统在分发服务器上创建distribution系统数据库、复制文件夹、复制监视器。
2.配置发布服务器和创建出版物
出版物是准备发布的表、表中数据的子集或其它数据库对象的集合。出版物是订阅的单元。
在企业管理器中运行向导,右击【复制】,单击【新建/发布】启动【创建发布向导】,然后按提示进行。
在“指定项目”步骤,单击“项目默认值”或“对象”右端的省略号按钮,可设置快照属性。
可循环创建多个发布。
可查阅和修改已建发布的属性。
3.订阅
订阅是对发布到指定订阅服务器的数据或数据库对象的请求。一个订阅服务器可以向不同发布请求多个订阅。
订阅可在发布服务器上创建(强制订阅)或在订阅服务器上创建(请求订阅)。(1)强制订阅
在企业管理器中:工具/向导,展开【复制】,启动【创建强制订阅向导】,然后按提示进行。
(2)请求订阅 在企业管理器中:工具/向导,展开【复制】,启动【创建请求订阅向导】,然后按提示进行。
也可按教材P175的例子,先创建发布,再配置发布和分发服务器,最后创建订阅。
第五篇:网络数据库讲稿(查询)
网络数据库讲稿
一、简单的SELECT
P95 1.SELECT … FROM …(1)DISTINCT(2)TOP n [PERCENT](3)字段别名
有三种书写格式。
2.WHERE子句(SELECT … FROM … WHERE …)
P101(1)比较运算符(2)逻辑运算符
(3)范围运算符BETWEEN(4)列表(包含)运算符 IN(5)字符匹配运算符LIKE及通配符(6)空值NULL 3.ORDER BY子句(SELECT … FROM … WHERE … ORDER BY …)
P107 ORDER BY子句必须放在SELECT语句的最后。
4.GROUP BY子句(SELECT … FROM … WHERE …GROUP BY … ORDER BY …)P109(1)GROUP BY子句中的列名必须是原表中的列名,不能是别名。(2)当SELECT子句中有聚合函数时,GROUP BY子句实现分组统计。
(3)当SELECT子句中同时有字段名列和聚合函数列时,必须使用GROUP BY子句。例如
select 班级编号,SUM(已修学分)from 学生 GROUP BY 班级编号
(4)在SELECT子句中出现的列名必须出现在GROUP BY子句中、或聚合函数中。GROUP BY子句中的列名则不一定出现在SELECT子句中。(5)ROLLUP返回第一个分组列的统计行。例如:
select 班级编号,性别,SUM(已修学分)from 学生GROUP BY 班级编号,性别 WITH ROLLUP(6)CUBE是ROLLUP的扩展。(7)ALL短语
P109 select 班级编号,性别,SUM(已修学分)from 学生
WHERE已修学分>4 GROUP BY ALL 班级编号,性别
ALL不能与WITH同用。6.HAVING子句
(SELECT … FROM … WHERE …GROUP BY … HAVING … ORDER BY …)P111(1)HAVING应与GROUP BY配对使用,否则不能使用。(2)HAVING的主要作用是第二次筛选。
(3)HAVING中可以包含聚合函数(WHERE中不可以)。
(4)HAVING中非聚合函数中的字段名,必须出现在GROUP BY中。(5)SELECT列表中命名的别名,不能在HAVING中使用。7.COMPUTE子句,按排序字段分组求和。
SELECT 姓名,分数 FROM 学生,成绩 WHERE 学生.学号=成绩.学号 ORDER BY 姓名 COMPUTE SUM(分数)
SELECT 姓名,分数 FROM 学生,成绩 WHERE 学生.学号=成绩.学号 ORDER BY 姓名 COMPUTE SUM(分数)BY 姓名
网络数据库讲稿
SELECT 姓名,分数 FROM 学生,成绩 WHERE 学生.学号=成绩.学号 ORDER BY 姓名 COMPUTE SUM(分数)BY 姓名 COMPUTE SUM(分数)
Compute By 必须与 Order By 子句一起使用,而且Compute By 子句中的统计列名列表也必须与之相同。
8.SELECT INTO,将查询结果保存到永久表中。
P136
二、多表查询
P112 1.内、外连接
内外连接中用ON<条件> 2.交叉连接
交叉连接中用WHERE<条件>,用WHERE<条件>的交叉连接等同于内连接。3.合并两个查询
(1)联合查询
P120 SELECT 员工编号,员工姓名,'员工信息表' FROM 员工信息 WHERE 所任职位='经理' UNION SELECT 部门编号,部门名称,'部门信息表' FROM 部门信息
(2)INTERSECT
P305 SELECT 学号 FROM 成绩表 INTERSECT SELECT 学号FROM 学生信息
(3)EXCEPT SELECT 学号FROM 学生信息 EXCEPT SELECT 学号FROM 成绩表
三、子查询
P121