12009-7-28 Information College · ChangJun
附 1:
第 11章 C/S应用程序开发
22009-7-28 Information College · ChangJun
[本章概要 ]
11.1 数据库应用体系架构
11.2 中间件技术
11.3 典型的数据库应用系统开发工具
11.4 Visual Basic和 ADO( Windows应用 )
11.5 ASP程序设计 ( Web应用)
32009-7-28 Information College · ChangJun
11.1 数据库应用体系架构
42009-7-28 Information College · ChangJun
11.1.1 客户 /服务器结构 (Client /Server)
最早起源于局域网中对打印机等外设资源的共享要求。
形成客户机 --- 服务器两层体系结构:客户机提出请求,服务器对客户机的请求做出回应。
通过对服务功能的分布,实现分工服务。
工作过程:
客户机负责管理用户界面、接收用户数据、处理应用逻辑、生成数据库服务请求,然后 将这些请求发送给服务器,并且接收服务器返回得结果,最后将这些结果按照一定的格式返回给用户。
服务器接收客户机的请求,处理这些请求,返回处理结果给客户机,这些处理结果包括访问数据库的结果数据和执行状态。
52009-7-28 Information College · ChangJun
11.1.2 浏览器 /服务器结构 ( Browse/Server)
起源于 Internet的应用。
浏览器 ---- Internet服务器 ----数据库服务器三层体系结构。
业务的表达通过简单的浏览器来实现。
工作过程:
用户通过浏览器提交表单,把信息传递给
Internet服务器,Internet服务器根据用户的请求,分析出要求数据库服务器进行的查询,交给数据库服务器去执行,数据库服务器把查询结果反馈给 Internet服务器,再由 Internet服务器用标准的 HTML语言反馈给浏览器。
62009-7-28 Information College · ChangJun
11.2 中间件技术
11.2.1 概述对于那些相对独立的软件供应商而言,经常要为每一个 DBMS编写一个版本的应用程序,或者为每个要访问的 DBMS编写针对 DBMS的代码。这就意味着,大量的资源都耗在了编写和维护 DB的访问上,更不用说应用程序了。
此时应用程序的评价标准不再是质量,而是它能否在给定的 DBMS中访问数据库。
这就需要开放的数据库连接,就是人们需要用一种新的方法来访问不同的数据库。为此,在 C/S结构中必须广泛使用中间件技术,以隐藏各种复杂性,屏蔽各种系统之间的差异。 ODBC,OLEDB和 JDBC就是这种优秀的中间件技术。
72009-7-28 Information College · ChangJun
中间件( middleware)是分布式环境中保证操作系统、通信协议、数据库等之间进行对话、互操作的软件系统。
中间件的作用是保证网络中各部件(软件和硬件)
之间透明地连接,即隐藏网络部件的异构性,尤其保证不同网络、不同 DBMS和某些访问语言的透明性,即下面三个透明性。
1、网络透明性:能支持所有类型的网络 。
2、服务器透明性:不管服务器上的 DBMS是何种型号
( ORACLE,SYBASE,DB2等),一个好的中间件都能通过标准的 SQL语言与不同 DBMS上的 SQL语言连接起来。
3、语言透明性:客户机可用任何开发语言进行发送请求和接受回答,被调用的功能应该像语言那样也是独立的。
82009-7-28 Information College · ChangJun
11.2.1 ODBC的体系结构
1989年,Microsoft,Lotus,Sybase和 DEC四个公司联合提出一个称为 SQL互连( SQL Connectivity)的访问接口规范,定义了一批访问数据库的函数。
1990年,数据库厂商集团 SAG SQL互连作为其调用级接口( CLI)规范基础。
1992年,Microsoft公司发布了一个扩充 CLI的软件开发工具集,称开放数据库互连( ODBC),得到许多数据库和软件开发商的支持。
1995年,ISO正式批准 SQL/CLI为 SQL-92的一个附件,
称 SQL-92/CLI。
1999年,SQL/CLI成为 SQL,1999标准的一部分,且为多数 RDBMS产品所支持。
92009-7-28 Information College · ChangJun
采用 API的应用编程
102009-7-28 Information College · ChangJun
OD BC 数据库应用程序
S QL S e rv e r
驱动程序
Ora c le
驱动程序
DB2
驱动程序
S y b a se
驱动程序
F o x p ro
驱动程序驱动程序管理器
S QL S e rv e r
数据源
Ora c le
数据源
F o x p ro
数据源
S y b a se
数据源
DB2
数据源
DB DB DB DB DB
ODBC的分层体系结构
112009-7-28 Information College · ChangJun
接口和实现应用程序 的主要功能是:调用 ODBC函数,递交 SQL语句给 DBMS,检索出结果,并进行处理。
驱动程序管理器 是一个动态连接库( DLL),
用于连接各种 DBS的 DBMS驱动程序(如 Oracle、
Foxpro,Sybase等驱动程序),管理应用程序和
DBMS驱动程序之间的交互作用(通信)。
驱动程序 也是一个动态连接库( DLL),应用程序通过调用驱动程序所支持的函数来操纵 数据库 。
122009-7-28 Information College · ChangJun
网络环境下基于单层驱动程序的 ODBC结构
132009-7-28 Information College · ChangJun
基于多层驱动程序的 ODBC结构(两层结构)
142009-7-28 Information College · ChangJun
基于网关机制的多层驱动程序 ODBC结构
(三层结构)
OD BC 数据库应用程序客户端网络支撑软件客户浏览器
(网络)
数据库引擎
WW W 服务器数据库驱动程序管理器数据库网关服务器网络支撑软件驱动程序数据库服务器
152009-7-28 Information College · ChangJun
数据源 类型
1、用户数据源用户创建的数据源,称为,用户数据源,。此时只有创建者才能使用,并且只能在所定义的机器上运行。任何用户都不能使用其他用户创建的用户数据源。
2、系统数据源所有用户和在 Windows NT下以服务方式运行的应用程序均可使用系统数据源。
3、文件数据源文件数据源是 ODBC 3.0以上版本增加的一种数据源,可用于企业用户,ODBC驱动程序也安装在用户的计算机上。
162009-7-28 Information College · ChangJun
11.3 典型的数据库应用系统开发工具
1,PowerBilder
2,Delphi
3,Visual Basic (VBscript)
4,Developer/ 2000
5,Visual Studio,NET
172009-7-28 Information College · ChangJun
11.4 Visual Basic和 ADO
11.4.1 通用数据访问( UDA)
通用数据访问( UDA)的核心是 OLE DB。
OLEDB是 Microsoft开发的最新数据库访问中间件技术,
它基于 OLE和 COM技术,是一个基于低级对象的接口,提供对各种类型数据的访问,而不管它们的数据形式和存储方法。 是 ODBC的“接班人”。
尽管 OLE DB解决了许多数据访问问题,但它是系统级程序接口,很难实现低层的组件接口。
微软的 ActiveX 数据对象( ADO)解决了这个问题,它提供了一个易用接口与 OLE DB相连,从而承担了数据访问。
ADO是一个应用级程序接口,它允许程序设计人员使用
Visual Basic,Visual C++,C++,Java等语言编写基于 OLE
DB数据的应用程序。
182009-7-28 Information College · ChangJun
通用数据访问的结构
Visual Basic / Visual C++ /
或其他应用程序
ADO
OLE DB
大型机和老式数据系统非传统数据库,如电子邮件传统数据库如关系数据库主要 DBMS资源包括:
1,服务器数据库如 Oracle,SQL Server
2,桌面数据库,如 Access和 FoxPro
3,大型机数据库,如 DB2
4、其它信息资源,如文件系统中存储的数据,(如
UNIX 或 Windows NT E-mail systems) 电子邮件系统,
索引顺序文件(用 COBOL编写的数据件)等。
192009-7-28 Information College · ChangJun
Microsoft ActiveX 数据对象( ADO)是一组自动化对象,这组对象使用 OLE DB API,并使应用程序得以使用来自 OLE DB 数据源的数据。这包括以许多不同的格式存储的数据,而不仅仅是 SQL 数据库中的数据。任何用启用自动化的语言(如 Visual Basic,Visual C++)编写的应用程序都可以使用 ActiveX 数据对象 (ADO) API。
如果对 SQL Server 进行通用数据访问,建议首选
ADO API,原因如下:
1,ADO 易于学习和编程。
2,ADO 具有大多数通用应用程序所需的功能集。
3,ADO 使程序员能够快速生成功能强健的应用程序。
4,ADO 在动态服务器页 (ASP) 中广泛使用
202009-7-28 Information College · ChangJun
11.4.2 ADO 对象模型
ADO 对象模型由 7个对象构成,
1,Connection(连接 )对象
Connection对象用于建立和保持与一个数据源的连接。包括数据库连接串,用户名和密码,游标类型和路径等信息。
2,Recordset (记录集 )对象这个对象持有从基于 SQL调用或存储过程调用的查询返回的记录/数据。
3,Command(命令 )对象
Command对象用于存放 SQL命令或存储过程引用的相关信息。
212009-7-28 Information College · ChangJun
4,Field(字段 )对象字段对象包含一个记录集中单列数据的相关信息。它不仅包括字段的实际数据,还包括了字段的附加信息,如数据类型、长度和其它由服务提供者明确定义的属性。
Recordset对象包括 Fields 集合,即所有 Field对象。
5,Error (错误 )对象此对象包含由数据提供者提供的一条扩展错误信息。
6,Parameter(参数 )对象
Parameter对象是 Parameter集合的一部分。它用于指定参数命令的输入或输出参数。
7,Property(属性 )对象此对象包括了所有提供者定义的 ADO对象特征。
222009-7-28 Information College · ChangJun
11.4.3 使用 ADO数据控件来访问数据
以很少的代码来创建一个数据访问应用程序
提供了
可视的界面来设置数据访问的属性
它提供了一个从应用程序到我们要访问的数据的连接
只需通过绑定控件到 ADO数据控件就可以在窗体中显示数据
232009-7-28 Information College · ChangJun
一旦控件被设置了数据源属性后就被绑定到
ADO数据控件
这样的控件包括
复选框( CheckBox)
组合框( ComboBox)
图像( Image)
标签( Label)
列表框( ListBox)
图片框( PictureBox)
文本框( TextBox)
–DataCombo
–DataGrid
–Hierarchical FlexGrid
–DataList
–Masked Edit
–RichTextBox
242009-7-28 Information College · ChangJun
1、添加 ADO数据控件。
在工具箱中添加 ADO数据控件
通过,工程( Project),菜单项的,部件
( Components),子菜单项,再选中选项
‘ Microsoft ADO Data control 6.0?
最后一个记录下一个记录上一个记录第一个记录
252009-7-28 Information College · ChangJun
2、连接到数据源
设置 ADO 数据控件的连接字符串
( ConnectionString)属性
创建到数据源的连接
给出了将要访问的数据库的位置和类型
在 ADO 数据控件的属性窗口中单击
ConnectionString属性旁的浏览按钮就可以设置这个属性
262009-7-28 Information College · ChangJun
272009-7-28 Information College · ChangJun
使用数据连接文件
这个选项指定一个连接到数据源的自定义的连接字符串
单击旁边的,浏览,按钮可以选择一个连接文件
使用 ODBC数据源名称
这个选项允许使用一个系统定义好的数据源名称
( DSN)来作为连接字符串
可以在组合框中的数据源列表中进行选择,
使用旁边的,添加,按钮可以添加或修改 DSN
282009-7-28 Information College · ChangJun
使用连接字符串
这个选项定义一个到数据源的连接字符串
单击,生成,按钮弹出,数据连接属性,对话框
在这个对话框中可以指定提供者的名称、
连接以及其它的要求信息
292009-7-28 Information College · ChangJun
连接到数据源(续)
302009-7-28 Information College · ChangJun
3、记录源( RecordSource)属性
在建立到数据库的连接之后,记录源属性指定记录从何而来
属性指定为一个
表的名称
存储过程
SQL语句
312009-7-28 Information College · ChangJun
使用 SQL语句是一个很好的练习,因为它只从表中检索出满足条件的行而不是整个表类型 说明
AdCmdUnknown 未知命令,缺省值 。
AdCmdText 允许在命令文本框中指定一个 SQL命令
AdCmdTable 罗列所连接到的数据库中的表名 。
AdCmdStoredProc 显示数据库中所有可能的查询和存储过程 。
322009-7-28 Information College · ChangJun
4、绑定控件到 ADO数据控件
数据源属性
把控件绑定到数据库的 ADO数据控件
如:假设一个窗体有一个文本框和一个连接到 Northwind 数据库中顾客( Customers)
表的 ADO数据控件
为了能看到顾客( Customers)表中的数据,就必须把文本框绑定到数据源 ADO数据控件
332009-7-28 Information College · ChangJun
绑定控件到 ADO控件(续)
数据域( DataField)属性
指定数据源中要求的域。
如:为了看到所有顾客的名称,把绑定到 ADO
数据控件的文本框的数据域属性设为顾客
( Customers)表中表示名称的相应的域
单击位于 ADO数据控件上的按钮时,所有绑定到
ADO数据控件的控件就会显示相应的当前记录的信息
342009-7-28 Information College · ChangJun
绑定控件到 ADO控件(续)
所有在绑定的控件上做的修改也会相应的写回到数据库中
下列 Visual Basic工具箱中的控件是可以绑定到 ADO数据控件的:
图片框 标签文本框复选框组合框 列表框图片 OLE 控件
352009-7-28 Information College · ChangJun
绑定控件到 ADO控件(续)
控件 说明
DataGrid 对从数据源得到的记录和域以多重行和列的方式显示并允许对之进行操作
DataCombo 自动从连接的数据源的一个域产生的绑定的组合框
DataList 自动从连接的数据源的一个域产生的绑定的列表框
Hierarchical
FlexGrid
对包含字符和图片的表给予完全的自由去进行排序,合并和格式化
Masked Edit 对输入数据进行限制,同时也对输出数据进行格式化
RichTextBo
x
允许用户输入和编辑文本,同时提供比标准文本框控件更为高级的格式化功能
362009-7-28 Information College · ChangJun
5,DataCombo 和 DataList 控件
DataCombo 和 DataList 控件
DataList 和 DataCombo控件能给数据库程序带来更大的灵活性和方便
能够自动从绑定的数据控件中的数据域中填充数据
通过选择,工程( Project),菜单项中的
,部件( Components),子菜单项,选中
,Microsoft DataList Controls 6.0 (OLE
DB)”选项,才能把它们添加到工具箱中
372009-7-28 Information College · ChangJun
6、创建记录集
Recordset(记录集 )对象
表示一个表中所有的记录或者一个已执行命令的结果的对象。
用来访问查询返回的记录
总是指向查询返回记录集中一个记录,该记录被称之为当前记录
使用记录集对象可以对数据库中的数据作如下操作:
插入记录
修改记录
删除记录
查找特定记录
382009-7-28 Information College · ChangJun
7、插入记录
AddNew方法
向记录集中添加新的记录
当插入一条新的记录时,绑定的控件会清空控件中的信息以便接受新记录的信息
adoEmployees.Recordset.AddNew
这条新插入的记录成为当前记录
当移动到其他记录时,新记录被加到数据库中
CancelUpdate方法
可以取消在记录上做的任何修改
语法,
adoEmployees.Recordset.CancelUpdate
392009-7-28 Information College · ChangJun
8、修改记录
移动到想修改的记录,并做必要的修改,然后移到下一个记录,这时 ADO数据控件会自动地修改记录
Update方法
对当前记录进行修改
adoEmployees.Recordset.Update
402009-7-28 Information College · ChangJun
9、删除记录
Delete方法
删除一个记录。
adoEmployee.Recordset.Delete
记录从数据库中被移走
在绑定的控件中还是会显示这个记录的信息
直到我们把当前记录指针移到其它记录上
412009-7-28 Information College · ChangJun
10、查找记录
Find方法
查找满足指定查询条件的记录
语法,
object.Find (criteria,skiprows,
searchdirection,start)
422009-7-28 Information College · ChangJun
查找记录(续)
参数 说明
Criteria 一个字符串,它包含一条语句用来指定查找中使用到的列名,比较操作符 ( >,<,= 或者 LIKE 子句 ) 以及限定值
Skiprows 可选,缺省为零 。 用来指定到当前行或是 ‘ start’参数指定的开始行的偏移量 。
Searchdir
ection
可选,指定检索的方向 。 它的值可以是 adSearchForward
( 向前检索 ) 和 adSearchBackward ( 向后检索 ) 。
start 可选,指 定 查 询 的 起 始 位 置 。 它 的 值 可 以 是
adBookmarkCurrent ( 从 当 前 记 录 开 始 查 询 ),
adBookmarkFirst ( 从 第 一 个 记 录 开 始 查 询 ) 和
adBookmarkLast ( 从最后一个记录开始查询 ) 。
432009-7-28 Information College · ChangJun
查找记录(续)
下面语句中使用了 Find方法的四个参数来查询一个名叫 ‘ David?的雇员的信息:
adoEmployee.Recordset.Find _
“Emp_name =?David?”,0,_
adSearchBackward,adBookmarkCurrent
442009-7-28 Information College · ChangJun
11.4.4 使用 ADO数据对象来访问数据
ADO程序的一般操作过程:
创建一个连接对象
打开连接
在数据源上执行一个查询
对查询返回的结果进行处理
关闭连接
452009-7-28 Information College · ChangJun
一、连接
1、创建和打开一个连接
声明了一个变量来创建连接对象:
Dim con As ADODB.Connection
Set con = New Connection
要求设置属性
连接字符串( ConnectionString)
连接等待时间( ConnectionTimeout)
462009-7-28 Information College · ChangJun
2、连接字符串
包含用来建立到数据源的连接的信息。
属性 说明
Provider 指定用于连接的提供者的名称,表示连接的数据库的类型
Data
Source
指定连接的数据源的名称,例如:一个 MS
Access 数据库
User ID 指定打开连接时使用的用户名称
Password 指定打开连接时使用的口令
472009-7-28 Information College · ChangJun
连接字符串(续)
连接字符属性支持下面这几个参数:
提供者 参数值
Microsoft Jet Microsoft.Jet.OLEDB.
3.51
Oracle MSDAORA
Microsoft ODBC
Driver
MSDASQL
SQL Server SQLOLEDB
482009-7-28 Information College · ChangJun
3、连接等待时间
这个属性给出了建立连接时,停止连接尝试并给出出错信息之前的等待时间
下面的例子中,连接对象 ‘ con?使用了
ConnectionString 和 ConnectionTimeout属性来建立一个到 Jet数据库的连接
492009-7-28 Information College · ChangJun
连接等待时间(续)
con.ConnectionString =,Provider =
Microsoft.Jet.OLEDB.3.51;” & _
“Data Source=C:\Program files\Microsoft
Visual Studio\VB98\Biblio.mdb”
Con.ConnectionTimeout=30
502009-7-28 Information College · ChangJun
4、打开一个连接
Open方法
建立一个到数据源的物理连接。
可以通过连接执行命令处理结果
connection.Open
[ConnectionString],[UserID],[Password]
512009-7-28 Information College · ChangJun
打开一个连接(续)
下面的代码使用 Open方法建立到 Jet数据库的连接:
参数 说明
ConnectionStrin
g
可选,一个包含连接信息的字符串
UserID 可选,建立连接时所要求的用户名
Password 可选,建立连接时所要求的口令
522009-7-28 Information College · ChangJun
打开一个连接(续)
Dim con As ADODB.Connection
Set con = New Connection
con.ConnectionString =,Provider =
Microsoft.Jet.OLEDB.3.51;” & _
“Data Source=C:\Program files\Microsoft
Visual Studio\VB98\Biblio.mdb”
con.Open
532009-7-28 Information College · ChangJun
打开一个连接(续)
Open方法中的连接字符串也可以如下定义,
Dim con As ADODB.Connection
Dim str as String
Set con = New Connection
str = "Provider =
Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=C:\Program files\Microsoft
Visual Studio\VB98\Biblio.mdb"
con.Open str
542009-7-28 Information College · ChangJun
5、关闭连接
Close方法
关闭连接
关闭一个对象并没有把这个对象从内存中清除掉
为了完全的从内存中删除一个对象,需要把这个对象设置为 Nothing
con.Close
Set con = Nothing
552009-7-28 Information College · ChangJun
二、记录集
1、创建和打开记录集
创建记录集
通过记录集对象本身
使用命令对象
步骤
声明一个记录集对象变量
下面的代码声明了一个记录集对象变量:
Dim rs as ADODB.Recordset
562009-7-28 Information College · ChangJun
创建和打开记录集(续)
初始化这个变量
下面的代码创建了一个对象实例:
Set rs = New Recordset
使用 Open 方法从数据源中获取数据
语法,
Recordset.Open [Source],
[ActiveConnection],[CursorType],
[LockType],[Options]
572009-7-28 Information College · ChangJun
创建和打开记录集(续)
Open 方法的参数
Source
可选,它可以是一个表的名称或是一个
SQL查询语句的变量
它依赖于连接的提供者
ActiveConnection
如果已经创建了到数据源的连接可以使用这个连接的名字来进行对记录集的进一步的创建和操作
582009-7-28 Information College · ChangJun
创建和打开记录集(续)
如果没有创建连接这个参数就要求给出创建一个连接所需要的信息它只随着记录集的存在而存在
CursorType
指定记录集使用的游标的类型
592009-7-28 Information College · ChangJun
创建和打开记录集(续)
游标类型 ADO 常数向前 adOpenForwardOnly - — 除了只能在记录集中向前移动以外,其它的和动态游标类似键集 adOpenKeyset – 不允许查看其他用户添加的记录和访问其他用户删除的记录动态 adOpenDynamic – 允许其他用户插入,更新和删除,支持在记录集中所有方向上的移动静态 adOpenStatic - 支持在记录集中所有方向上的移动 。 但是其他用户的插入,更新和删除操作不可见
602009-7-28 Information College · ChangJun
创建和打开记录集(续)
LockType
指明在编辑状态下对记录上锁的类型
缺省时所有 ADO 记录集都是 read-only (只读)
612009-7-28 Information College · ChangJun
创建和打开记录集(续)
锁的类型 说明
AdLockReadOnly ( 缺省 ) Read-only( 只读 ),数据不能被更改 。
AdLockPessimistic 提供者通过锁住包含有当前正在修改的记录的页来保证对记录成功的操作 。 一旦该记录被锁住,其他用户就不能对这个记录进行编辑 。
AdLockOptimistic 包含该记录的页只在记录更新时锁住 。 当有两个用户更新同一个记录时就会产生冲突 。
先提交更新请求的用户得到更新的权力 。
adLockBatchOptimistic 使用 BatchUpdate 方法可以允许成批的向记录集中更新记录,而不用逐行的处理 。
622009-7-28 Information College · ChangJun
Options
表示提供者如何给 Source 参数赋值
这个参数的值类似于 ADO数据控件的数据源属性中的命令类型选项
下面的例子打开一个连接和一个记录集
记录集是建立在作者表上,其游标类型是键集,锁则是 pessimistic类型:
创建和打开记录集(续)
632009-7-28 Information College · ChangJun
Dim con As ADODB.Connection
Dim rs as New Recordset
Set con = New Connection
con.ConnectionString = _
“Provider = Microsoft.Jet.OLEDB.3.51;” & _
“Data Source=C:\Program Files\Microsoft,& _
“Visual Studio\VB98\Biblio.mdb”
con.Open
rs.Open,Select * from Author”,con,_
adOpenKeyset,adLockPessimistic
创建和打开记录集(续)
642009-7-28 Information College · ChangJun
也可以象下面的例子使用记录集对象来创建一个连接:
Dim rs As New Recordset
rs.Open "Select * from Author",_
"Provider = Microsoft.Jet.OLEDB.3.51;" & _
"Data Source = C:\Program Files\Microsoft"
& _
"Visual Studio\VB98\Biblio.mdb" _
,adOpenKeyset,adLockPessimistic
上面的程序在记录集对象的
ActiveConnection参数中给出了要打开的连接。
创建和打开记录集(续)
652009-7-28 Information College · ChangJun
2、显示在记录集中的数据
创建了记录集之后,就可以访问记录的每个域
下面的例子说明怎样通过当前记录从顾客表
( Customer)的 c_name 和 c_add域中获取顾客的名称和地址,并把它们放到相应的变量中
662009-7-28 Information College · ChangJun
显示在记录集中的数据(续)
Dim name As String
Dim address As String
name=rs.Fields(“c_name”)
address=rs.Fields(“c_add”)
如果你不想引用域的名称,则可以使用如下的代码
672009-7-28 Information College · ChangJun
显示在记录集中的数据(续)
Dim name As String
Dim address As String
name = rs.Fields(0)
address = rs.Fields(2)
还可以通过使用,惊叹号,操作符 ‘ ! ’ 来快捷的获取数据
682009-7-28 Information College · ChangJun
显示在记录集中的数据(续)
Dim name As String
Dim address As String
name = rs!c_name
address = rs!c_add
下面的例子实现把从顾客表中获取到的数据放到相应的文本框中
692009-7-28 Information College · ChangJun
显示在记录集中的数据(续)
Private Sub Form_Load()
Dim con As ADODB.Connection
Dim rscust As ADODB.Recordset
Set con = New Connection
con.ConnectionString = _
"Provider = Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=C:\Program files\" & _
"Microsoft Visual Studio\VB98\" & _
"Nwind.mdb"
con.Open
Set rscust = New Recordset
rscust.Open "Customers",con
txtcustid.Text = rscust!CustomerId
txtcustname.Text = rscust!CustomerName
End Sub
702009-7-28 Information College · ChangJun
3、浏览记录集
语法:
object.method
下面的例子中用到了 MovePrevious 和
MoveFirst方法。如果用户单击命令按钮
cmdPrev企图移到 BOF之前时就会弹出消息框来告错用来浏览方法 说明
MoveNext 从当前记录向后移动一个记录 。 如果企图移动到最后一个记录 ( 以 EOF为标识 ) 之后,则系统告错 。
MovePrevious 从当前记录向前移动一个记录 。 如果企图移动到第一个记录 ( 以 BOF为标识 ) 之前,则系统告错 。
MoveFirst 把记录集的第一个记录置为当前记录 。
MoveLast 把记录集的最后一个记录置为当前记录 。
712009-7-28 Information College · ChangJun
浏览记录集(续)
Private Sub cmdPrev_Click()
rst.MovePrevious
If rst.BOF=True Then
MsgBox,Already at the beginning
,& _
“of the Recordset”
rst.MoveFirst
End If
End Sub
722009-7-28 Information College · ChangJun
浏览记录集(续)
方法和属性 说明
Move 方法 在记录集内相对于当前位置移动游标
AbsolutePage 属性 用来表示当前记录所在页的位置
AbsolutePosition 属性表示记录集当前记录的序号位置
NextRecordset 方法 清除当前记录集并通过一系列命令返回下一个记录集 。 只在处理多个记录集时使用
732009-7-28 Information College · ChangJun
4、查找记录
在记录集中查找满足某一条件的记录
object.Find (criteria,
skiprows,searchdirection,start)
下面的例子是查找出年龄大于 40 岁的顾客的记录。
rscust.Find,Age> 40”,0,
adSearchForward,_
adBookmarkCurrent
742009-7-28 Information College · ChangJun
5、编辑记录
Update方法的语法格式如下:
Recordset,Update Fields,Values
参数 说明
Fields 可选,指定想要修改的域的名称 。
Values 可选,指定域的新值 。
752009-7-28 Information College · ChangJun
编辑记录(续)
下面的例子
更改出版商表中的当前记录并把它保存回数据库中
通过把控件的值赋给相应的记录集的域
Private Sub cmdSave_Click()
rspub!name = txtname.Text
rspub!City = txtcity.Text
rspub.Update
End Sub
762009-7-28 Information College · ChangJun
6、插入记录
在雇员表( Employee)中插入一个新的记录
Private Sub Add()
If (txtID.Text <>,“) And
(txtName.Text <>,”) Then
rstemp.AddNew
rstemp!emp_id = txtID.Text
rstemp!name = txtName.Text
rstemp.Update
End if
End sub
772009-7-28 Information College · ChangJun
7、删除记录
下面的代码实现在单击命令按钮 cmdDelete
并得到确认后从雇员表( Employee table)
中删除当前记录
Private Sub cmdDelete_Click()
Dim ans As Integer
ans = MsgBox("Do you want to Delete this
record?",vbYesNo)
If ans = vbYes Then
rsemp.Delete
rsemp.MoveFirst
else
Exit Sub
End if
End Sub
782009-7-28 Information College · ChangJun
三、命令对象
1、使用命令对象
如果想要执行带参数的存储过程和 SQL命令,就必须使用命令对象元素 说明
ActiveConnection 属性 指向命令执行对应的连接
CommandText 属性 包含想要执行的命令的字符串,与数据源提供者相关
CommandType 属性 表示命令对象的类型 。 它的值可以是
adCmdText,,adCmdUnknown、
adCmdTable和 adCmdStoredProc。 类似于记录集对象的 Open方法的 Option参数
CreateParameter 方法 向命令对象的参数集中添加一个参数
Execute 方法 执行命令对象
792009-7-28 Information College · ChangJun
使用命令对象(续)
往参数集中添加参数
Append方法
CreateParameter方法
语法,
CommandObject.Parameters.Append
object
Append后的对象可以使用 CreateParameter
方法
802009-7-28 Information College · ChangJun
使用命令对象(续)
command.CreateParameter(Name,Type,Direction,Size,
Value)
Name
一个用来指明参数对象的名称的字符串。
Type
指明参数对象的类型。
Direction
指出该参数是提交给查询还是从查询返回。
Size
给出参数允许的最大长度(按字符个数或字节计算)。
Value
给出参数对象的值
812009-7-28 Information College · ChangJun
使用命令对象(续)
Private Sub Form_Load()
Dim con As ADODB.Connection
Dim cmd As ADODB.Command
Dim str As String
Set con = New ADODB.Connection
Set cmd = New ADODB.Command
con.ConnectionString = _
"Provider = Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=C:\Program files\Microsoft Visual" & _
"Studio\VB98\studentdata.mdb"
con.Open
Set cmd.ActiveConnection = con
str = "Update Student Set studentname = 'Jim Baker' where studentname= 'Liz Nizon?"
cmd.CommandText = str
cmd.Execute
End Sub
822009-7-28 Information College · ChangJun
2、命令对象和参数
使用 Recordset对象的 Open方法,可执行简单的 SQL命令。
要执行的 SQL查询或存储过程需要一些参数,
这就需要使用 Command对象。
参数给了程序开发者一个载体,使程序可依据用户输入执行命令。
命令对象的 Execute属性用于执行一条 SQL命令,它返回结果记录集。
Command.Execute RecordsAffected,
Parameters,Options
832009-7-28 Information College · ChangJun
命令对象和参数(续)
如果将一个整型变量作为第一个参数,在执行程序时它将持有受 SQL命令影响的多个记录。
如果查询需要多个参数,可使用参数集。
参数应在执行命令前定义。
842009-7-28 Information College · ChangJun
以下的例子是使用参数从 pubs数据库的 authors
表中检索记录。参数应在执行命令前定义。
Dim cmd as ADODB.Command
Dim Str1 As String
Str1 =,Select * from authors where au_lname =?”
With cmd
.ActiveConnection = cnn
.CommandText = Str1
.CommandType = adCmdText
End With
cmd.Parameters(0)=InputBox$(“Enter the Last Name
of the Person”)
Set rs=cmd.Execute
Manipulate the Recordset
852009-7-28 Information College · ChangJun
直接执行与预置语句间的区别
直接执行
SQL服务器从客户端应用程序接收查询字符串,处理它并返回结果集。在查询结束后,
字符串将被删除而不是被存储。
预置语句
告诉 SQL Server 保存被编译过的语句副本,将其放在数据库的一个临时存储器中。
调用已被编译过的版本,运行速度将会大大提高。
如要使用预置语句,我们需要先将 Command
对象的 Prepared属性设为 True。
862009-7-28 Information College · ChangJun
下面是如何执行预先声明的例子。
Dim cmd as ADODB.Command
Dim Str1 As String
Str1 =,Select * from authors where
au_lname =?”
With cmd
.ActiveConnection = cnn
.CommandText = Str1
.CommandType = adCmdText
.Prepared = True
End With
Command 对象的
Prepared 设定为 True
872009-7-28 Information College · ChangJun
四、使用存储过程
1、存储过程
数据访问代码不是放在客户端应用程序中,就是放在商业级对象中。这样就会出现以下一些不足:
程序员在开发客户端应用程序或商业级对象时必须具有编写 SQL程序的知识。
SQL程序在每次执行时都需要编译,这就影响了运行速度。
以上问题可用存储过程解决。
存储过程可由有经验的 SQL代码程序员编写,其它程序员可专心编写客户端应用程序或商业级对象。
882009-7-28 Information College · ChangJun
存储过程
只需知道如何通过 ADO调用存储过程即可
存储过程是用 Transact SQL编写而后存放在
SQL Server上的。
在存储过程第一次被执行后,关系型数据库管理系统将这些 SQL查询程序存储在高速缓冲存储器中。在其后调用此存储过程时,直接从高速缓冲存储器中调出,无须再次编译,调用可大大提高程序运行速度。
892009-7-28 Information College · ChangJun
2、存储过程返回记录集
连接对象的 Execute方法的语法如下,它并不能返回一个记录集。
Set recordset = connection.Execute
(CommandText,RecordsAffected,Options)
其中
CommandText:一个字符串,它包括要执行的 SQL语句、表名或存储过程。
RecordsAffected:可选,一个长整型变量,在数据返回时用来控制返回行数。
Options:任意一个长整型变量,它指出提供者应该如何求出 CommandText变元的值。它可是以下任意值。
adCmdText adCmdTable
adCmdTable adCmdStoredProc
902009-7-28 Information College · ChangJun
以下是用连接对象的 Execute方法建立一个记录集的例子。
Dim conn as ADODB.Connection
Dim rs as ADODB.Recordset
Set conn = new ADODB.connection
Statements to Open the connection
Set rs = conn.Execute,call AllAuthors”,
NoRecs,adCmdStored
假设 AllAuthors过程返回所有作者的详细信息。
912009-7-28 Information College · ChangJun
下面的例子给出了如何将一个存储过程的名称
(不使用参数 )置于 Recordset对象的 Open方法
Dim conn as ADODB.Connection
Dim rs as ADODB.Recordset
Set conn = new ADODB.connection
Set rs = new ADODB.Recordset
rs.Open,AllAuthors”,conn,adOpenKeyset,
_
adLockOptimistic,adCmdStoredProc
922009-7-28 Information College · ChangJun
3、存储过程和命令对象
我们可以使用 Command对象执行一个 SQL查询。
我们也可用 Command 对象去调用存储过程,
将 CommandText属性设为存储过程的名字,同时把 CommandType属性设为 adCmdStoredProc。
932009-7-28 Information College · ChangJun
下面的程序使用命令对象调用存储过程
AllAuthors。
Dim conn as ADODB.Connection
Dim rs as ADODB.Recordset
Dim cmd as ADODB.Command
Set conn = new ADODB.connection
Set rs = new ADODB.Recordset
Statements to Open the connection
With cmd
.ActiveConnection = conn
.CommandText =,AllAuthors”
.CommandType = adCmdStoredProc
set rs =,Execute
End With
Steps to manipulate the Recordset
942009-7-28 Information College · ChangJun
4、存储过程和参数
存储过程可使用一个或几个参数,参数的改变会影响其运行结果。
让我们看看下面在 SQL Server上编写的包含参数的存储过程。
CREATE PROC C_Authors
@mCity varchar(40)
AS
SELECT * from authors where City = @mCity
GO
这个存储过程把城市( City)作为参数,返回的作者详细内容要根据用户输入的城市
952009-7-28 Information College · ChangJun
存储过程和参数
在 ADO代码中调用这个存储过程。使用命令对象,
我们有两种方法可以调用它。
如果数据源的访问很快,即如果网络很快,我们可以用数据集的 Refresh方法来传递参数。
使用 CreateParameter方法建立一个独立的参数对象。这个参数对象可以使用 Append方法附加在参数集合中。参数对象中放置的是为存储过程指定的参数信息,这样就不需要每次从服务器上重新提取参数信息了。
语法
Set parameter = _
command.CreateParameter(Name,Type,Direct
ion,Size,Value)
962009-7-28 Information College · ChangJun
Dim conn as ADODB.Connection
Dim rs as ADODB.Recordset
Dim cmd as ADODB.Command
Set conn = new ADODB.connection
Set rs = new ADODB.Recordset
Statements to Open the connection
With cmd
.ActiveConnection = conn
.CommandText =,C_Authors”
.CommandType = adCmdStoredPro
.Parameters.Refresh
.Parameters(0).Value =,Miami”
set rs =,Execute
End With
Steps to manipulate the Recordset
The refresh method requires an active connection to
succeed.
972009-7-28 Information College · ChangJun
Dim conn as ADODB.Connection
Dim rs as ADODB.Recordset
Dim cmd as ADODB.Command
Dim prm as ADODB.Parameter
Set conn = new ADODB.connection
Set rs = new ADODB.Recordset
With cmd
.ActiveConnection = conn
.CommandText =,C_Authors”
.CommandType = adCmdStoredPro
Set
prm=.CreateParameter(“mCity”,adChar,adParaInput,40,“Mi
ami”)
.Parameters.Append prm
Set rs =,Execute
End With
Steps to manipulate the Recordset
982009-7-28 Information College · ChangJun
如果存储过程需要一组参数,我们使用相同的对象变量一个个地将它们附加到参数集合中来创建一组参数对象。下面的代码就是一个例子。
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim prm As ADODB.Parameter
Set prm = _
cmd.CreateParameter(“mCity”,adChar,adParaInput,4
0,“Miami”)
cmd.Parameters.Append prm
Set prm = _
cmd.CreateParameter(“mCountry”,adChar,adParaInpu
t,40,“USA”)
cmd.Parameters.Append prm
cmd.Execute
992009-7-28 Information College · ChangJun
11.5 ASP程序设计
11.5.1 关于 ASP
Microsoft Active Server Pages( ASP)是服务器端脚本编写 环境,使用它可以创建和运行动态、交互的 Web 服务器应用程序。
使用 ASP 可以组合 HTML 页、脚本命令和
ActiveX 组件以创建交互的 Web 页和基于 Web
的功能强大的应用程序。
ASP 应用程序很容易开发和修改。
1002009-7-28 Information College · ChangJun
11.5.2 HTML 编写人员如果您是位 HTML 编写人员,您将发现 ASP 脚本提供了创建交互页的简便方法。如果您曾想从 HTML 表格中收集数据,或用顾客的姓名个人化 HTML 文件,或根据浏览器的不同使用不同的特性,您会发现 ASP 提供了一个出色的解决方案。
以前,要想从 HTML 表格中收集数据,就不得不学习一门编程语言来创建一个 CGI 应用程序。现在,您只要将一些简单的指令嵌入到您的 HTML 文件中,就可以从表格中收集数据并进行分析。您再不必学习完整的编程语言或者单独编译程序来创建交互页。
对于 ASP,您可以便捷地使用 ActiveX 组件来执行复杂的任务,比如连接数据库以存储和检索信息。
1012009-7-28 Information College · ChangJun
11.5.3 有经验的脚本编写人员如果您已经掌握一门脚本语言,如 VBScript、
JavaScript 或 PERL,而且您已经了解使用 ASP
的方法。只要安装了符合 ActiveX 脚本标准的相应脚本引擎,就可以在 ASP 页中使用任何一种脚本语言。
ASP 带有 VBScript和 JScript 的脚本引擎,
这样您可以立即开始编辑脚本。 PERL,REXX 和
Python 的 ActiveX 脚本引擎可以从第三方开发人员处获得。
1022009-7-28 Information College · ChangJun
11.5.4 Web 开发人员如果您已经掌握了一门编程语言,如
Visual Basic,您将发现 ASP 是快速创建 Web
应用程序的一个非常灵活的方法。
通过向 HTML 中添加脚本命令,您能够创建应用程序的 HTML 接口。
通过创建自己的 ActiveX 组件,可以将应用程序中的商业逻辑封装到能够从脚本、其他组件或从其他程序中调用的模块。
使用 ASP 进行计算的 Web 可转化为有形的利益,它使 Web 供应商能够提供交互的商业应用而不仅仅是发布内容。
1032009-7-28 Information College · ChangJun
例如,旅行社能够比公布航空时刻表做得更多;用 ASP 脚本可以让客户察看现有的航班、
比较费用并预定座位。
包含在 Windows NT Option pack 中的
Microsoft Transaction Server( MTS)可以降低在服务器上构造程序的复杂性和费用。 MTS 可以解决开发那些保密性强的、可分级的以及可靠的 Web 应用程序的复杂性问题。
1042009-7-28 Information College · ChangJun
11.5.6 Active Server Pages 模型浏览器从 Web 服务器上请求,asp 文件时,ASP
脚本开始运行。然后 Web 服务器调用 ASP,ASP 全面读取请求的文件,执行所有脚本命令,并将 Web 页传送给浏览器。
由于脚本在服务器上而不是在客户端运行,传送到浏览器上的 Web 页是在 Web 服务器上生成的。所以不必担心浏览器能否处理脚本,Web 服务器已经完成了所有脚本的处理,并将标准的 HTML 传输到浏览器。
由于只有脚本的结果返回到浏览器,所以服务器端脚本不易复制。用户看不到创建他们正在浏览的页的脚本命令。