ADO数据控件

2024-10-10

ADO数据控件(精选4篇)

ADO数据控件 篇1

0 引言

ASP.NET是Microsoft.NET平台下的一部分。它实现了Web应用程序的快速开发。其中连接数据库的主流技术是通过ADO.NET或ADO实现的。本文基于ASP.NET框架,介绍ADO和ADO.NET两种数据库访问技术,然后就进行分析和研究。

1 ADO技术简介

1.1 ADO技术

Active X Data Objects(ADO)是微软的一种数据访问技术。它被设计用来和数据访问层OLE DB Provider一起协同工作,以提供通用数据访问(Univer-sal Data Access)。OLE DB是一个低层的数据访问接口,并基于微软公司的COM技术,用它可以访问各种数据源,其模型如图1所示。ADO的3个主要组成对象是:Connection、Record Set和Command。

(1)Connection对象:用于表示和数据源的连接,以及处理一些命令和事物。

(2)Command对象:用于执行某些命令来进行诸如查询、修改数据库结构的操作,并将返回结果存在Recordset对象中。也可以进行批操作和操纵数据库的结构,当然,这需要使用的OLE DB Provider提供相应的支持。此外,可以将一个激活的Connection对象绑定到Command对象的Active Connection属性,这使得多个Command对象实例可以共用一个Connection对象。

(3)Record Set对象:用于处理数据源的表格集,它是在表中修改、检索数据的最主要的方法。这些结果由数据的行(记录)和列(字段)组成。

ADO的几个对象间的关系结构图如图2所示。

使用ADO访问数据元的特点可以概括如下:

(1)易于使用,可以说这是ADO最重要的特点之一。

(2)ADO是高层数据库访问技术,相对与ODBC来说,具有面向对象的特点。

(3)在ADO对象结构中,对象与对象之间的层次结构不是非常明显,这会给编写数据库程序带来更多的便利。比如,在应用程序中如果要使用记录集对象,不一定要先建立连接、回话对象,如果需要就可以直接构造记录集对象。

(4)可以访问多种数据源。和OLE DB一样,使应用程序具有很好的通用性和灵活性。

1.2 ASP.NET中使用ADO数据库访问技术

在ASP.NET中使用ADO时,首先要注意下面两点:

(2)为了在ASP.NET网页里调用、使用STA(Single Thread Apartment)的COM组件,程序必须在<%@Page...>前导指令加上aspcompat=”true”属性;其余便和ASP网页使用ADO一样。下面以一范例部分代码为示例。

2 ADO.NET技术简介

2.1 ADO.NET技术

ADO.NET是对ADO的继承,是一个用来存取数据和信息的API。它提供与OLE DB接口兼容的数据源的数据存取接口,应用程序可以使用ADO.NET连接到这些数据源来获取、操纵和更新数据;还提供SQLServer编程接口,对SQL Server数据库访问效率比OLE DB接口访问SQL Server数据库效率高。其模型如图3所示。ADO.NET的核心组件主要有三类,即Connection、Data Set和Command。另外还添加了许多新的对象和程序化接口,如:Data Adapter、Data View、Data Reader等等。

(1)Connection对象:Connection对象在应用程序和数据库之间建立连接。通过SQL Connection对象建立与SQL Server数据库的链接到支持ADO Managed Provider的数据来源。

(2)Command对象:是设置SQL命令、传递系统参数以及取得数据结果等,可以通过SQLCommand对象直接操作SQLServer数据库,通过OLEDB Command操作支持Managed Provider的数据来源。

(3)Data Set对象:Data Set不是一个Record Set,而是类似数据库(Data Base),在Data Set中可以包含任意数量的数据表(Data Table),且每个表对应一个数据库的数据表(Table)或视图(View)。

(4)Data Adapter对象:它是提供连接Data Set对象和数据源的桥梁,并且Data Adapter使用Command数据源中执行的SQL命令,以便将数据加载到Data Set中,并使对Data Set中数据的更改与数据源保持一致。

ADO.NET的几个对象间的关系结构如图4所示。

2.2 ADO.NET访问技术的应用程序示例

下面是一个简单的ADO.NET应用程序,它从数据源中的三个表中返回结果并将其输出到窗口的Data Grid中:

3 两种技术之比较

ADO与ADO.NET既有相似也有区别,他们都能够编写对数据库服务器中的数据进行访问和操作应用程序,并且易于使用、速度快,内存支出低、占用磁盘空间较少,支持用于建立基于客户端/服务器和Web的应用程序的主要功能。但是,他们也具有以下四个方便的差异,而它们的差异,换句话说,也是ADO.NET的优点所在。

(1)缓存中数据集的存储形式。

ADO中数据是以Record Set形式存储,它的数据来源于多个表,但在内存中选择只能集中和显示在一个表中;ADO.NET中的数据集是Data Set,它在缓存中可以是一个或多个表的数据库。

(2)脱机与连机关系。

ADO.NET采用的是离线数据集(Disconnect Data Set),ADO.NET利用XML制作数据的一份副本(快照副本snapshot),它除了制作副本时在线,其他时间都是离线的。而ADO却是一直与服务器连着的在线型访问,数据访问代价比较大。

(3)标准化程度。

XML对ADO支持非常有限,而ADO.NET的设计包含了被广泛接受的XML标准,用户与Web信息共享及异构应用数据交换。

(4)传输性能。

传输性能方面ADO.NET更强。ADO基于COM技术,必须符合COM的规范,而ADO.NET基于XML数据格式,数据类型更为丰富,它不需要由COM编排而进行数据类型转换。另外防火墙通常配置只允许HTML文本通过,因为Data Set序列化格式是XML,所以防火墙可以允许Data Set通过,阻挡ADO的记录集。

4 结束语

ADO.NET是新型的Dot NET数据库访问技术接口,它支持工业技术标准,集合了所有用于数据处理的类。这些类代表了数据容器对象,它们以典型的数据库功能为特色,如索引、排序和浏览,且ADO.NET是Dot NET数据库应用程序最终的解决方案,它以整体设计为特色,而不是以数据库为核心的ADO模型。ADO.NET集成了ADO对象模型与OLE DB接口,图1和图3结合起来,可以体现这一点。所以,ADO.NET访问技术不仅在以上四个方面比ADO强,而且在功能上增进不少,尤其为Web应用程序的设计提供了一个更稳定、更具有扩展性的数据库存取技术,因此掌握ADO.NET技术具有更深远的意义。

参考文献

[1]陈志泊.ASP.NET数据库应用程序开发教程[M].北京:人民邮电出版社,2005:86-87.

[2]廖信彦.ASP.NET交互式Web数据库程序设计[M].北京:中国铁道出版社,2003:102-138.

[3]田启明.VB中基于ADO的数据库访问方法[J].电脑开发与应用,2004,17(6):33-34.

ADO数据控件 篇2

这次我使用ADO.NET来插入一条数据,到数据库中。主用到存储过程。我不想每次都是用SQL文本的形式了,那样始终没有进步~~~

下面首先,我把我这次练习要用到的数据库脚本,贴出来:

USE master --使用系统数据库 GO IF EXISTS(SELECT * FROM sysdatabases WHERE name=N‘DB_MyStudentLife‘) DROP DATABASE [DB_MyStudentLife]; --如果要创建的数据库存在的话,就删除 GO CREATE DATABASE [DB_MyStudentLife] --创建数据库 GO USE [DB_MyStudentLife] --使用数据库 GO IF EXISTS(SELECT * FROM sysobjects WHERE name=N‘MyClass‘) DROP TABLE [MyClass] --如果要创建的数据表存在的话,就删除(注意sysobjects,一定要全部是小写的,不然有错误,不能写成大写的。) GO CREATE TABLE MyClass --创建数据表 ( C_ID INT NOT NULL PRIMARY KEY, --班级编号 C_Name NVARCHAR(200) not null, --班级名称 C_Descr nvarchar(max) not null --班级简介 ); GO IF EXISTS(SELECT * FROM sysobjects WHERE name=N‘MyStudent‘) DROP TABLE MyStudent GO CREATE TABLE MyStudent ( S_ID int not null primary key, --学号 S_Name nvarchar(50) not null, --姓名 S_Gender char(2) not null,--性别 S_Address nvarchar(max) not null , --地址 S_Phone nvarchar(50)not null, --电话 S_Age int not null, --年龄 S_Birthday datetime not null, --生日 S_CardID int not null, --身份证号码 S_CID int not null references MyClass(C_ID) --班级编号 );

接着大家选中刚才执行脚本,创建好的数据库,然后使用我下面的数据,向数据库表里面添加数据吧

insert into MyClass(C_ID,C_Name,C_Descr)values(1,‘软件1108班‘,‘武汉软件工程职业学院‘); insert into MyClass(C_ID,C_Name,C_Descr)values(2,‘软件1107班‘,‘武汉软件工程职业学院‘); insert into MyClass(C_ID,C_Name,C_Descr)values(3,‘实验班‘,‘武汉软件工程职业学院‘); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘1‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘2‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘3‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘4‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘5‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘6‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘7‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘8‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘9‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘10‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘11‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘12‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘13‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘14‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘15‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘16‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1); insert into MyStudent(S_ID,S_Name,S_Gender,S_Age,S_Birthday,S_CardID,S_Phone,S_Address,S_CID)values(‘17‘,‘李四‘,‘男‘,‘22‘,‘1992-09-26‘,‘111111111‘,‘11232131234‘,N‘深圳宝安石岩‘,1);

说明一下,等会我要向MyClass表中插入数据,现在为这个表创建一个插入的存储过程:

IF OBJECT_ID(‘Ins_ClasseD‘,‘P‘) IS NOT NULL DROP PROCEDURE Ins_ClasseD GO CREATE PROCEDURE Ins_ClasseD @C_ID int , @C_Name nvarchar(200) , @C_Descr nvarchar(max) AS INSERT INTO dbo.MyClass ( C_ID, C_Name, C_Descr ) VALUES ( @C_ID, -- C_ID - int @C_Name, -- C_Name - nvarchar(200) @C_Descr -- C_Descr - nvarchar(max) ); GO

下面开始程序实现:

我是复习,ADO.NET,现在就随便建了一个控制台的应用程序,来开始我的测试:

注意;在下面的例子中,为了尽可能简单易于理解,我没有把连接字符串的那部分代码,放到配置文件中,

如果要放的话,要用到System.Configuration命名空间,还有一个ConfigurationManager类..具体的细节就不说了。

请看具体实现代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data;using System.Data.SqlClient;namespace ADO.NET插入一条数据到数据库中{ class Program { //连接字符串 private static string sqlCon = “server=.;database=DB_MyStudentLife;uid=sa;pwd=Password_1”; static void Main(string[] args) { //1创建连接对象(连接字符串) SqlConnection scon = new SqlConnection(sqlCon);//2创建命令对象(为命令对象设置属性) SqlCommand scmd = new SqlCommand; scmd.CommandText = “Ins_ClasseD”; scmd.CommandType = CommandType.StoredProcedure; //这里我使用存储过程来插入数据 scmd.Connection = scon; //3打开数据库连接 scon.Open();//设置参数 scmd.Parameters.Add(new SqlParameter(“@C_ID”,6)); scmd.Parameters.Add(new SqlParameter(“@C_Name”, “测试班”)); scmd.Parameters.Add(new SqlParameter(“@C_Descr”, “软件测试技术”)); //4发送命令 int result= scmd.ExecuteNonQuery(); //5处理数据 if (result > 0) { Console.WriteLine(“插入数据成功”); } else { Console.WriteLine(“插入数据失败”); } //6最后一步,差点忘记了,一定要关闭连接 scon.Close(); Console.ReadKey(); } }}

程序执行玩之后的效果图:

ADO数据控件 篇3

对于一个数据库开发者来说, 一个重要的环节就是研究数据库的访问技术。本文介绍了微软数据访问技术的主要几个阶段, 并对当前在.NET平台下被广泛使用并容易混淆的ADO与ADO.NET数据访问技术进行分析讨论, 希望和大家共同提高。

二、数据访问的历史

下面先来回顾一下微软数据访问技术所经过的几个阶段:

1、ODBC (Open Database Connectivity) 开放式数据库连接技术

它为异种数据库提供了统一的接口, 是第一个使用SQL访问不同关系数据库的数据访问技术。使用ODBC应用程序能够通过单一的命令操纵不同的数据库, 而开发人员需要做的仅仅只是针对不同的应用加入相应的ODBC驱动。

2、DAO (Data Access Object) 数据访问对象

它是一种面向对象的界面接口, 通过DAO/Jet功能可以访问ISAM访问数据库。不像ODBC那样是面向C/C++程序员的, 它是微软提供给Visual Basic开发人员的一种简单的数据访问方法, 主要用于操纵Access数据库。

3、RDO (Remote Data Objects) 远程数据库对象

在使用DAO访问不同的关系型数据库的时候, Jet引擎不得不在DAO和ODBC之间进行进行命令的转化, 导致了性能的下降, 而RDO (Remote Data Objects) 的出现就顺理成章了。它是一个到ODBC的面向对象的数据访问接口, 远程数据对象和集合为使用代码来创建和操作一个远程ODBC数据库系统的各个部件提供一个框架。

4、OLE DB (Object Linking and Embedding, Database) COM模型的数据库接口

随着越来越多的数据以非关系型格式存储, 需要一种新的架构来提供这种应用和数据源之间的无缝连接, 基于COM (Component Object Model) 的OLE DB应运而生了。它是一种底层的数据访问界面接口, 它能够处理任何类型的数据。

5、ADO (Active X Data Objects) Active X数据对象

基于OLE DB之上的ADO更简单、更高级、更适合Visual Basic程序员, 同时消除了OLE DB的多种弊端, 取而代之的是微软技术发展的趋势。

6、ADO.NET

ADO.NET是ADO的进一步演变。它不与ADO共享相同的编程模型, 却共享ADO的大部分功能。ADO.NET是一组处理数据的类。

三、ADO和ADO.NET的对照

由于在.NET平台下数据的访问是通过ADO或ADO.NET来实现的, 在实际的教学过程中很多学生认为这两种方法是一样的, 没有本质区别, 其实不然, 下面我们就对这两种方法做一下分析比较。

1、ADO技术

Active X Data Objects是微软的一种数据访问技术。他是DAO/RDO的后继产物, 扩展了DAO和RDO所使用的对象模型, 这意味着它包含较少的对象, 更多的属性、方法以及时间。它被设计用来和数据访问层OLE DB Provider一起协同工作, 以提供通用数据访问。如前面所述, OLE DB是一个底层的数据访问界面接口, 并基于微软的COM技术, 因此使用ADO可以访问各种数据源。其架构图如图1所示:

ADO有3个核心的组成对象:Connection、Record Set和Command

⑴Connection对象:它是到本地或远程数据的连接, 管理应用程序和数据库之间的通信。

⑵Record Set对象:是用来连接到一个记录集, 从而获得查询的结果, 这些结果以二维表格的方式给出。

⑶Command对象:它是用来处理重复执行的查询或处理需要检查在存储过程中输出和返回参数值的查询, 并将返回结果存在Record Set对象中。此外还可以利用OLE DB Provider所提供的支持来进行批操作和操纵数据库结构操作。

2、ADO.NET技术

ADO.NET是ADO的进一步演变。是一个用来存取信息和数据的API。它提供与OLE DB接口兼容的数据源的数据存取接口, 应用程序可以使用ADO.NET连接到这些数据源来进行数据操作;另外ADO.NET使用了强类型化数据, 编程代码更为简明, 对数据库的访问效率更高。其架构图如图2所示:

ADO.NET的核心组成对象有3个:Connection、Data Set和Command;另外还添加了许多新的对象和程序化接口, 如:Data Adapter、Data View、Data Reader等

⑴Connection对象基本等价于ADO中的Connection对象, 可以使用它连接数据库或断开与数据库的连接。另外还可以作为其他对象 (比如Data Adapter和Command对象) 与数据库通信以提交查询并检索结果的通道。

⑵Command对象结构上与ADO的Command对象相似, 是设置SQL命令、传递系统参数和取得数据结果等, 另外可以通过SQLCommand所提供的不同方法来执行各种查询, 比如为处理以XML格式返回结果的查询而设计的方法 (Execute XmlReader) 。

⑶Data Set对象正如其名称表明的那样, 它不同于一个Record Set, 它包含一个数据集。可以认为Data Set对象是包含多个Data Table对象 (存储在Data Set对象的Table集合中) 的容器。另外, 创建ADO.NET是为了帮助开发人员建立大型的多层数据应用程序。有时, 可能需要访问运行在中间层服务器上的组件以检索一些表的内容。可以将所有数据包装到Data Set对象中并在单个调用中返回, 而不必每次一个表地重复请求服务器来提取数据。

⑷Data Adapter对象代表了微软数据访问模型的新概念, 虽然可以将ADO中的Command对象看成是它的同类, 但在ADO中没有真正与之等价的对象。在ADO.NET对象模型中, Data Adapter对象可以作为数据库和无连接对象之间的桥梁。

3、两种技术之比较

⑴ADO与ADO.NET的相似之处:

它们都能够编写对数据库服务器中的数据进行访问和操作的应用程序, 并且易于使用、高速度、低内存支出和占用磁盘空间较少, 支持用于建立基于客户端/服务器和Web的应用程序的主要功能。

⑵ADO与ADO.NET的区别:

通过上面的叙述我们知道ADO使用OLE DB接口并基于微软的COM技术, 而ADO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系框架。众所周之.NET体系不同于COM体系, ADO.NET接口也就完全不同于ADO和OLE DB接口, 这也就是说ADO.NET为.NET架构提供了更优化的数据访问模型, 它的主要优点主要体现在以下几个方面:

·数据集的存储方式

ADO采用Record Set存储, 它的数据来源于多个表, 但在缓存中只能集中显示在一张表中, 而ADO.NET采用Data Set存储, 它在缓存中可以是包含一张或多张表的数据库。

·互操作性与可维护性

ADO.NET使用XML格式把数据从数据源传输到本地内存的数据副本中, 因而互操作性更强, 维护更简单。

·对无连接环境的支持

ADO.NET支持离线数据集 (Dis Connect Data Set) 可以利用XML制作数据的一个副本, 除了制作副本的时候要求在线, 其他时候都是离线的。而ADO却是一直与服务器连接着的在线访型访问, 访问代价比较大。

·可编程性与传输性能

ADO.NET使用强类型化数据, 因而使得代码更加简明且易于编写;另外使用强类型化数据可以帮助避免开销很大的数据类型转换, 加快数据传输的性能。

·可伸缩性

ADO.NET编程模型鼓励程序员为运行在Web上的应用程序节省系统资源。因为数据保存在本地内存的缓存中, 因此没有必要为扩展的周期保留数据库锁或维持当前的数据连接。

四、结束语

ADO.NET是一组访问数据源的面向对象的类库。简单的理解, 数据源就是数据库, 它同时也能够是文本文件、Excel表格或者XML文件等。ADO.NET里包含了许多专门用于和数据打交道的对象, 是新型的.NET平台下的数据库访问技术, 它支持工业技术标准, 以整体设计为特色, 而不是以数据库为核心的A-DO模型, ADO.NET集成了ADO对象模型与OLE DB接口, 文中的图1和图2结合起来可以看出这一点。ADO和ADO.NET从本质上来说是两种不同的数据访问技术, 不能混为一谈, 而通过分析我们可以知道掌握ADO.NET技术对于我们具有更深远的意义。

摘要:探讨当前在.NET平台下被广泛使用且容易混淆的数据访问技术ADO与ADO.NET的异同点, 从数据集合的存储方式、互操作性与可维护性、对无连接环境的支持、可编程性与传输性能以及可伸缩性等方面来进行分析比较, 突出ADO.NET的优点。

关键词:ADO,ADO.NET,无连接环境,XML,强类型化数据

参考文献

[1]数据访问技术-ADO.NET程序设计微软公司著2006 (4)

[2]陈志泊ASP.NET数据库应用程序开发教程北京人民邮电出版社2005

ADO数据控件 篇4

ADO 编程模型详细资料

以下元素是 ADO 编程模型中的关键部分:

连接

命令

参数

记录集

字段

错误

属性

集合

事件

连接

通过“连接”可从应用程序访问数据源,连接是交换数据所必需的环境,通过如 Microsoft® Internet Information Server 作为媒介,应用程序可直接(有时称为双层系统)或间接(有时称为三层系统)访问数据源。

对象模型使用 Connection 对象使连接概念得以具体化。

“事务”用于界定在连接过程中发生的一系列数据访问操作的开始和结束。ADO 可明确事务中的操作造成的对数据源的更改或者成功发生,或者根本没有发生。

如果取消事务或它的一个操作失败,则最终的结果将仿佛是事务中的操作均未发生,数据源将会保持事务开始以前的状态。

对象模型无法清楚地体现出事务的概念,而是用一组 Connection 对象方法来表示。

ADO 访问来自 OLE DB 提供者的数据和服务。Connection 对象用于指定专门的提供者和任意参数。例如,可对远程数据服务 (RDS) 进行显式调用,或通过“Microsoft OLE DB Remoting Provider”进行隐式调用。(请参阅 RDS 教程通过“MS Remote Provider”调用 RDS 第二步的范例)

命令

通过已建立的连接发出的“命令”可以某种方式来操作数据源。一般情况下,命令可以在数据源中添加、删除或更新数据,或者在表中以行的格式检索数据。

对象模型用 Command 对象来体现命令概念。Command 对象使 ADO 能够优化对命令的执行。

参数

通常,命令需要的变量部分即“参数”可以在命令发布之前进行更改。例如,可重复发出相同的数据检索命令,但每一次均可更改指定的检索信息。

参数对执行其行为类似函数的命令非常有用,这样就可知道命令是做什么的,但不必知道它如何工作。例如,可发出一项银行过户命令,从一方借出贷给另一方。可将要过户的款额设置为参数。

对象模型用 Parameter 对象来体现参数概念。

记录集

如果命令是在表中按信息行返回数据的查询(行返回查询),则这些行将会存储在本地。

对象模型将该存储体现为 Recordset 对象。但是,不存在仅代表单独一个 Recordset 行的对象。

记录集是在行中检查和修改数据最主要的方法。Recordset 对象用于: 指定可以检查的行。

移动行。

指定移动行的顺序。

添加、更改或删除行。

通过更改行更新数据源。

管理 Recordset 的总体状态,

字段

一个记录集行包含一个或多个“字段”。如果将记录集看作二维网格,字段将排列构成“列”。每一字段(列)都分别包含有名称、数据类型和值的属性,正是在该值中包含了来自数据源的真实数据。

对象模型以 Field 对象体现字段。

要修改数据源中的数据,可在记录集行中修改 Field 对象的值,对记录集的更改最终被传送给数据源。作为选项,Connection 对象的事务管理方法能够可靠地保证更改要么全部成功,要么全部失败。

错误

错误随时可在应用程序中发生,通常是由于无法建立连接、执行命令或对某些状态(例如,试图使用没有初始化的记录集)的对象进行操作。

对象模型以 Error 对象体现错误。

任意给定的错误都会产生一个或多个 Error 对象,随后产生的错误将会放弃先前的 Error 对象组。

属性

每个 ADO 对象都有一组唯一的“属性”来描述或控制对象的行为。

属性有两种类型:内置和动态。内置属性是 ADO 对象的一部分并且随时可用。动态属性则由特别的数据提供者添加到 ADO 对象的属性集合中,仅在提供者被使用时才能存在。

对象模型以 Property 对象体现属性。

集合

ADO 提供“集合”,这是一种可方便地包含其他特殊类型对象的对象类型。使用集合方法可按名称(文本字符串)或序号(整型数)对集合中的对象进行检索。

ADO 提供四种类型的集合: Connection 对象具有 Errors 集合,包含为响应与数据源有关的单一错误而创建的所有 Error 对象。

Command 对象具有 Parameters 集合,包含应用于 Command 对象的所有 Parameter 对象。

Recordset 对象具有 Fields 集合,包含所有定义 Recordset 对象列的 Field 对象。

另外,Connection、Command、Recordset 和 Field 对象都具有 Properties 集合。它包含所有属于各个包含对象的 Property 对象。

ADO 对象拥有可在其上使用的诸如“整型”、“字符型”或“布尔型”这样的普通数据类型来设置或检索值的属性。然而,有必要将某些属性看成是数据类型“COLLECTION OBJECT”的返回值。相应的,集合对象具有存储和检索适合该集合的其他对象的方法。

例如,可认为 Recordset 对象具有能够返回集合对象的 Properties 属性。该集合对象具有存储和检索描述 Recordset 性质的 Property 对象的方法。

事件

“事件”是对将要发生或已经发生的某些操作的通知。一般情况下,可用事件高效地编写包含几个异步任务的应用程序。

对象模型无法显式体现事件,只能在调用事件处理程序例程时表现出来。

在操作开始之前调用的事件处理程序便于对操作参数进行检查或修改,然后取消或允许操作完成。

上一篇:军队会计工作下一篇:运动训练