ADO.NET入门

ado

本文主要讨论了作为实现基本数据库操作方法之一的ADO.NET,以及ADO.NET与ADO的基本比较

ADO.NET将成为构建数据感知.NET应用程序的基础.不同于ADO的是,ADO.NET更具有通用性,不是那么专门针对数据库而进行的设计.ADO.NET聚集了所有可以进行数据处理的类.这些类呈现了具有典型数据库功能的datacontainerobjects,比如:索引,排序,浏览.尽管ADO.NET是作为重要的.NET数据库应用程序的解决方案,它更多的显示了涵盖全面的设计,而不仅是作为和ADO模型一样的以数据库为中心。.

ADO.NET与ADO有很大的不同.它是一个全新的访问编程模型.当你开始使用ADO.NET时,你会发现你所掌握的任何关于ADO的技能在搭建有效的程序以及解决难题方面对你都会有很大帮助,能够帮你在解决问题上朝更灵活更稳妥的方向发展.

ADO.NET不是ADO为适应.NET基础构造而进行改进的版本.当你慢慢了解了ADO.NET的语法,代码设计以及移植后,你就会清楚了.

1.NET中的数据访问

访问ADO.NET中的数据源是由托管提供程序所控制.虽然托管提供程序与OLEDB有两处重大的不同,但是二者是极为类似的.首先,托管提供程序在.NET环境下运行,通过DataReader和DataTable.NET类来检索和展示数据.第二,它们的体系结构都比较简单,是因为为了适应.NET而进行了优化.

此时,ADO.NET分成两种不同类型的托管提供程序:一种用于SQLServer?7.0或更高版本,另一种适用于所有你可能已经安装的OLEDB提供程序.虽然运用在两种托管提供程序中的类是不同的,但它们却都遵循相类似的命名方式.除开前缀之外,其它名称都是相同的.前一种情况前缀为SQL,后一种则是ADO.

你需要利用SQL类来访问SQLServer表,因为SQL类会跳过由OLEDB提供程序呈现的中间层,而直接进入数据库服务器内部API.ADO类是位于OLEDB提供程序顶端的.NET接口,利用COMInterop桥来进行工作.

关于ADO.NET的入门知识,你可以读读OmriGazitt's的文章,文章里主要介绍了ADO+:

关于微软..NET框架的数据库访问服务(DataAccessServices),而我的文章里关于ADO+的论述主要指出了数据种类的进化.前者更纯技术化,并提供了更高水平的关于ADO.NET编程模型的概述。后者主要是解释ADO.NETR的目标,以及它与XML,脚本及其它技术的联系.

2.读取数据

ADO.NET应用程序要从数据源里读取数据,首先得创建一个连接对象.这个连接对象可以是SQLConnection或是ADOConnection,这取决于所采用的目标提供程序.需要记住的是,虽然在这里不做推荐,但你也可以利用ADO.NET类来连接到SQLServer数据库.这种方法唯一不足是,代码需要通过一个不必要的额外代码层.首先它会调入ADO的托管提供程序,然后ADO的托管提供程序再调用SQLServerOLEDB提供程序.如同OLEDB提供程序做的一样,SQLServer托管提供程序会直接操作数据,

关于ADO和ADO.NET在连接对象上最大的差别在于ADO.NET连接不支持CursorLocation属性.与其说这是一个文档BUG,还不如认为这是一个备具争议的设计问题.为强制执行它的以数据为中心的基准,ADO.NET没有游标的显示实现.

在ADO中,你已习惯于利用游标将记录从数据库或其它OLEDB兼容的数据源中抽取,你可以选择客户端或是服务器端游标,每种游标都有几个预先设定的游标类型.而在ADO.NET中更多的是从数据源中抽取数据,并且为读取和分析数据提供新的编程接口

在ADO中,通过规定连接和命令文本,你可以创建一个Recordset对象.对于游标的位置和类型Recordset有一些规定.你可以按下面的方法来读取数据.

在内存中创建选定记录的静态副本,然后在断开与数据源的连接时对副本进行处理,ADO称之为静态游标.

通过快速的,仅向前的,只读游标来滚动数据,,ADO称之为仅向前游标.

通过服务器端游标来访问数据,需要良好的连接,但您可以在不同层面上检测由其它连线用户输入的信息,ADO称之为:动态游标.

头两种都是在断开的recordsets上进行操作,并从客户端缓存中读取信息,另外,前两种方式也常被用于面向WEB的环境中以及全新的n-tier系统当中.

在ADO中,以上所有这些方式与不同类型的游标相对应.在文中,你将会发现,ADO.NET虽然与ADO不同,但它具备了ADO的所有功能.相对照来说,你的代码将从实际的数据源及其物理存储媒介和格式中抽取数据.

ADO.NET能够使DataSet和DataReader将数据从数据源中抽取出来.前者是记录在内存中的缓存,你可以从任意方向访问并随意作出修改.后者是高度优化的对象,在只读纪录集中以仅向前方式向前移动。注:DataSet看起来象是静态游标,但实际上,在.NET中,与ADO只读游标相对应的是DataReader对象.

在ADO.NET中,虽然对于服务器端的游标不提供任何支持,但这不意味着你就不能使用游标.实际上,你所需要做的步骤是在.NET中输入ADO库.你只需在referencesnode上单击右键,就可以在你自己的程序里运行本地ADO对象.

但是我个人认为,在你想转向.NET时,请慎重考虑.首先,请务必完全输入ADO,这不会花费太多时间和精力,这是向.NET迈出的第一步,.但是,这仅仅是万里长征的第一步而且也是通向.NET必须的一步..NET的真正附加值是基于一个均匀的,持续稳定的接口以及本地classes的广为应用之上的.关于COMlibraries是可以被支持的,合理的,但不被鼓励的,因为它仅仅是个短期解决方案,或者是一个过渡步骤.

当你要开始使用ADO.NET时,请考虑这样一个事实:ADO.NET统一了数据容器类编程接口,.因此,不管是何种类型的程序:WindowsForm,WebForm,或者WebService也好,你都得在同一组类中集中处理有关数据.不管处于后端的数据源是SQLServerdatabase,或是OLEDB提供程序,,XML文件,又或是数组,你都可以使用一样的方法和属性来进行处理.

如果你坚持在.NET世界中使用ADO,那么请准备好面对一些其它的影响,例如你需要额外的代码才能够从数据绑定控件中使用recordset.

3.DataSet,DataTable,andRecordset

关于Recordsetobject.,ADO.NET并没有与其直接相对应的对象.最接近的是DataTable对象.虽然它们二者几乎具有相同的功能,但它们在各自的框架里发挥着不同的作用.

Recordset是一个相当大的对象,具备ADO的大多数功能,但在某些方面仍有欠缺.Recordset在一些方面性能优良,如:它具可创造性,它可以离线操作,功能众多,但在一些方面仍需改进,如:基于其固有的COM特性,Recordset很难在网络上连载;Recordset是一个二进制的对象,因此不同平台之间的模块很难共享它;还有就是蛇不能够穿过防火墙.另外,它表现的是记录的单个表.如果该table作为一个或几个JOIN的结果,那么它很难更新原始代码源.当你试图将脱线的recordset与原始代码源统一起来时,数据源必须能够识别SQL.不管如何,你的recordset可以由非SQL提供程序创建.

在ADO.NET中,ADORecordset的所有功能被分拆成几块更简单的对象:其中一个便是DataReader.DataReader模拟了快速,只读,仅向前的只读游标的操作.

DataTable,表现了数据源,是个简单的对象.你可以手动构造一个DataTable,或者也可使用DataSet命令自动生成.DataSet对于它所包含的数据知之不多.通过它,你可以在内存中处理数据,或者是其它比如排序,编辑,筛选,创建浏览等工作.

DataSet对象是一个数据容器类,是实现ADO.NET数据抽取的关键对象.DataSet集合了一个或几个DataTable对象.DataTable通过如行,列这样的通用集合,公开自身的内容.当你尝试从数据表读取数据时,你也许正穿过了两个不同的层面:DataTableMapping和DataView.

DataTableMapping对象包含了数据源中的数据列,以及DataTableobject之间的映射关系.

当填充DataSet时,DataSetCommand对象要使用这个类。它维护数据集中的抽象列和数据源中的物理列之间的链接。

表的视图通过DataView对象实现。它表示DataTable的自定义视图,可以绑定到特定控件(如Windows窗体和Web窗体中的数据网格)中。该对象相当于SQLCREATEVIEW语句在内存中的实现。

DataSet中所有的表,通过一个公共的域,相互之间能产生关联.它们之间的联系是由DataRelation对象来进行管理.这样说起来挺象ADO的数据形成,但还是有一个最大的不同.

在DataRelation里,你不需要使用数据形成语言,而且还可以获得非常灵活的组织架构.通过ADO.NET导航模型,你可以很容易的从某一张表中的主行移动到它的所有子行里.

DataRelationobject是关于JOIN语句在内存中的实现,可用于建立数据类型相同的的parent/child关系,.一旦关系确立,任何破坏这种关系的修改都被禁止.Views和relations是完成master/detail架构的两个方法.请记住view仅是加载于记录之上的掩码,但是relation

是位于几个列之间的动态链接,在relation下,你无法更改顺序或是设置条件.

如果你的代码需要1对1的外键关系,而且更改数据,最好不用JOIN命令.如果你需要额外的筛选功能,你可以寻求ADO.NET自定义视图的支持.

4.转换现有代码

大量的ASP页面使用ADO对象来抽取数据.让我们一起来回顾下几例典型的案例,对你在以后处理移植或者改写代码时也许会有帮助。

如果你有从单个recordset生成报表的ASP页面,那么DataReader会是你的好帮手。

StringstrConn,strCmd;

strConn="DATABASE=MyAgenda;SERVER=localhost;UID=sa;PWD=;";

strCmd="Select*FromNameswhereID="+contactID.Text;

SQLConnectionoCN=newSQLConnection(strConn);

SQLCommandoCMD=newSQLCommand(strCmd,oCN);

oCN.Open();

SQLDataReaderdr;

oCMD.Execute(outdr);

while(dr.Read()){

//Usedr.GetString(index)or

//dr["fieldname"]toResponse.Writedata

}

你可以利用HasMoreRows属性来快速检查是否DataReader为空.如果你仅仅只简单处理一系列记录,没有什么比DataReader.更快,更好的对象了,它同样适用于查询单个记录。

DataReader.的内容是不可编辑的,但你可以将内容移动到更具管理功能的对象里,如:

DataTable或是一个或多个DataRow对象.

当你需要处理表与记录二者之间的复杂关系时,DataReader就不是合适的工具了。数据模型链接越多,SQL命令则会越复杂。导航模块保有连续性,最后放入缓存的数据往往多于你所需要的,.DataSet和DataRelationobjects是这种表关系模型的基础.

为管理parent/child关系,ADO同样也对data-shapingengine进行封装.总的说来,datashaping和ADO.NET关系是一回事.就设计方面来说,二者几乎没有共同点.Shapedrecordsetsct嵌入列表对象中包括了所有数据表信息。ADO.NET关系是动态链接,你可以在两个数据表间随时建立.ADO依靠于ShapingOLEDBservice提供程序,并使用专门的SQL类语言特征以在执行单个ADO命令的过程中生成一个分层的recordset.

在ADO.NET中,关系中涉及的每个对象总是被看成单独的个体。关系本身作为对象被公开,并且具有一定的行为规则。例如,DataRelation对象可以从父行到子行一层层进行更改。您可以通过将ForeignKeyConstraint对象添加到DataTable的Constraints集合中来进行此操作。ForeignKeyConstraint对象表示当删除或更新数值和行时,对通过外键关系相关联的一组列的约束。如前面提到的,一旦设置好了关系,在它按程序预设终止之前,您不能进行可能破坏该关系的更改。

正如早先提到的一样,一旦设置了relationship,除非它是程序性的终止,你不能够对它进行修改,那样会使它突然中断.

另外,relations没有递延性.你可以在Customers和Orders之间,Orders和Products之间设置两个不同的关系.但是,当为了某个customer而对orders导航时,你不能够从一个order跳到相关的products行.解决方法是,你必须另外打开Orders/Products关系,锁定你需要的order,然后获取相关的行.

程序员需要在ASPSession对中存储记录吗?通过ADO.NET和DataSet对象,你可以非常安全的进行工作,而不会引起在"StoringanADORecordsetinGITMightCauseAnAccessViolation"中所论及的麻烦

时间: 2024-08-04 01:31:18

ADO.NET入门的相关文章

【转】VC++ ADO编程入门简介

VC++ ADO编程入门简介  一.ADO简介    ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,请不必为此担心,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API.DAO.RDO都要容易使用,并不失灵活性.本文将详细地介绍在VC下如何使用ADO来进行数据库应用程序开发,并给出示例代码.    本文示例代码     二.基本流程    万事

VC++ ADO编程入门简介

一.ADO简介    ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,请不必为此担心,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API.DAO.RDO都要容易使用,并不失灵活性.本文将详细地介绍在VC下如何使用ADO来进行数据库应用程序开发,并给出示例代码.    本文示例代码     二.基本流程    万事开头难,任何一种新技术对于初学者

ADO.NET入门(2)

ado  2.读取数据       ADO.NET应用程序要从数据源里读取数据,首先得创建一个连接对象.这个连接对象可以是SQLConnection 或是 ADOConnection,这取决于所采用的目标提供程序. 需要记住的是,虽然在这里不做推荐,但你也可以利用ADO .NET 类来连接到SQL Server数据库. 这种方法唯一不足是,代码需要通过一个不必要的额外代码层. 首先它会调入ADO的托管提供程序, 然后ADO的托管提供程序再调用SQL Server OLE DB 提供程序. 如同O

一个经典的ADO.NET入门例子

ado 众所周知,ADO.NET相对于ADO的最大优势在于对于数据的更新修改可以在与数据源完全断开联系的情况下进行,然后再把数据更新情况传回到 数据源.这样大大减少了连接过多对于数据库服务器资源的占用.下面是我在<ADO.NET实用指南>这本书上看到的一个例子,比较清楚的讲解 了ADO.NET的使用方法.Imports System.Data.SqlClientImports System.DataImports System.Data.Common Public Class Form1 In

一个经典的ADO.NET入门例子_ASP.NET

众所周知,ADO.NET相对于ADO的最大优势在于对于数据的更新修改可以在与数据源完全断开联系的情况下进行,然后再把数据更新情况传回到  数据源.这样大大减少了连接过多对于数据库服务器资源的占用.下面是我在<ADO.NET实用指南>这本书上看到的一个例子,比较清楚的讲解  了ADO.NET的使用方法.  Imports System.Data.SqlClient  Imports System.Data  Imports System.Data.Common  Public Class For

使用 ADO.NET 解锁 Microsoft Access 数据(1)

access|ado|数据 使用 ADO.NET 解锁 Microsoft Access 数据 Paul CornellMicrosoft Corporation 2001 年 12 月 6 日 Microsoft Office 提供了多种存储和管理数据的功能和工具,例如,数据访问对象 (DAO).ActiveX 数据对象 (ADO).Microsoft Word 邮件合并.Microsoft Excel Web 查询.Microsoft Query.数据访问页.Microsoft Access

使用ADO.NET解锁 Microsoft Access数据(一)

access|ado|数据 使用ADO.NET解锁 Microsoft Access数据 作者:微软中国   Microsoft Office 提供了多种存储和管理数据的功能和工具,例如,数据访问对象 (DAO).ActiveX 数据对象 (ADO).Microsoft Word 邮件合并.Microsoft Excel Web 查询.Microsoft Query.数据访问页.Microsoft Access 数据项目.Office 数据连接.Office 数据链接等等.而 Microsoft

关于ADO.NET数据库操作中的增删改查讲解

  我们要连接数据库之后就要对它进行增删改查,这里我们就详细的分析一下吧.对于ADO.NET数据库操作Insert,Update,Delete等单向操作,对于插入.删除.修改等操作,由于是客户端应用程序向数据库提出的请求,不需要返回源数据,这个过程是单向操作.单向操作的具体过程如图所示: Insert,Update,Delete单向操作图 主要有三个过程:首先,建立针对具体数据库的Connection对象,利用Connection对象的Open()方法打开数据库;然后,包含插入.删除.修改等命令

用vfp与sql server构建Client/Server应用程序(远程视图)(1)

本文是<用 Visual FoxPro 与 SQL Server 构建 Client/Server 应用程序>系列的一部分,照例"远程视图"应不是开篇章节,但我们发现:在我们为网站准备的文章中有太多的理论性的东西,为了缓解这一矛盾,我们决定把"远程视图"提上来先写. 当下最流行的 ADO 脱胎于 Visual FoxPro,在实际使用中两者各有特色,所以不要小看 Visual FoxPro 在远程数据处理上的能力,它绝对强大!读者可以参看本站的<M