ADO.NET
1 什么是ADO.NET?
ADO.NET即ActiveX Data Object .NET。在你进行数据访问的时候用到它。
它有对象:DataAdapter,DataSet,Command,Connection,DataReader等等。
ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。
ADO.NET 提供对 Microsoft SQL Server 等数据源以及通过 OLE DB 和 XML 公开的数据源的一致访问。数据共享使用者应用程序可以使用 ADO.NET 来连接到这些数据源,并检索、操作和更新数据。
ADO.NET 有效地从数据操作中将数据访问分解为多个可以单独使用或一前一后使用的不连续组件。ADO.NET 包含用于连接到数据库、执行命令和检索结果的 .NET 数据提供程序。您可以直接处理检索到的结果,或将其放入 ADO.NET DataSet 对象,以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起,以特殊方式向用户公开。ADO.NET DataSet 对象也可以独立于 .NET 数据提供程序使用,以管理应用程序本地的数据或源自 XML 的数据。
ADO.NET 类在 System.Data.dll 中,并且与 System.Xml.dll 中的 XML 类集成。当编译使用 System.Data 命名空间的代码时,将引用 System.Data.dll 和 System.Xml.dll。有关使用命令行编译器编译 ADO.NET 应用程序的示例,请参阅 ADO.NET 示例应用程序。
ADO.NET 向编写托管代码的开发人员提供了类似于 ADO 向 COM 开发人员提供的功能。
2 ADO.NET的发展历史
我们来看看数据库访问技术的历史
ODBC -> DAO -> RDO -> OLE DB -> ADO -> ADO.NET
ODBC(Open Database Connectivity,开放式数据连接):
ODBC是微软公司开放服务结构(WOSA,WindowsOpenServicesArchitecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。
但不是针对每一种数据库系统专门编写相应的访问模块,且工作量很大。
DAO(Data Access Object,数据访问对象):
DAO,是微软公司提供了在ODBC技术之上的一层抽象数据访问接口,提供一组一致的数据访问API接口,从而可以从每个数据库的技术细节中解脱出来。
但不得不面对不同的ODBC API(针对每种数据源都有不同的ODBC API),开发烦琐程度可想而知了。
RDO(Remote Data Object,远程数据对象):
随后,微软公司专门为C/S结构的应用程序设计了RDO,大大的缩短了同ODBC API之间的交互访问,提供了更优的性能。
OLE DB:
在RDO之后,微软提出了OLE DB技术,提供一个与数据源无关的数据访问方法,提供了数据提供者和数据访问者两种核心组件。
ADO(ActiveX Data Object , ActiveX数据对象):
是对OLE DB API的封装和抽象,通过面向对象的结构大大简化了基于OLE DB API的编程。但是,ADO仍然不能完全取代DAO和RDO技术,例如ADO技术不支持如针对Jet引擎的处理。
ADO.NET:
它支持结合松散的数据访问需求,多层Web应用程序及Web服务,它提供了真正意义上的独立于任何数据源的数据访问,形成一个统一的访问接口。
3 ADO.NET的结构
ADO.NET结构包括两个核心组件:DataSet和.NET Framework数据提供程序
DataSet是ADO.NET的断开式结构的核心组件,为了实现独立于任何数据源的数据访问,可将其视为从数据库检索出的数据在内存中的缓存。它包括一个或者多个DataTable对象的集合,这些对象由数据行,数据列及主键,外键,约束和有关DataTable对象中数据的关系信息组成。
.NET Framework数据提供程序,为了实现数据操作和对数据的访问。它提供的核心元素是Connection,Command, DataReader,DataAdapter对象。其中,Connection对象提供与数据库的连接;Command对象能够访问用于返回数据,修改数据,运行存储过程,以及发送或检索参数信息的数据库命令;DataReader对象从数据源中提供高性能的数据流。DataAdapter对象提供连接DataSet对象和数据源的桥梁,使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使对DataSet中的数据更改与数据源保持一致。
4 ADO.NET的数据访问过程
![](http://hiphotos.baidu.com/jackie%5Fsue/pic/item/f832f02a7e83329f033bf6bf.jpg)
一种方式是直接和数据库连接,即使用Command对象访问数据库。采用这种方式是通过DataReader对象读取数据,然后利用Response.Write显示数据。这种方式的优点是不用占用额外的内存,而是读取数据的速度比较快,但是,需要编写的程序代码比较长。
另一种方式是将数据缓存DataSet中,即使用DataAdapter对象访问数据库。采用这种方式是通过配合DataSet对象所提供的接口,利用DataGrid对象直接显示数据。这种方式的优点是所需要编写的代码比较少,但是需要占用额外的内存,并且读取数据的速度相对前一种方式比较慢。
5 举例说明:
private void BindData()
{
SqlConnection myConnection=conn();
string queryStr="select RecordNO,SendTime,Creater,CustomerID,SMSInfor from SendBoxInformation order by RecordNO DESC";
SqlDataAdapter myDataAdapter=new SqlDataAdapter(queryStr,myConnection);
DataSet myDataSet=new DataSet();
myDataAdapter.Fill(myDataSet,"SendBox");
if(myDataSet.Tables["SendBoxInformation"].Rows.Count>0)
{
DataGrid1.DataSource=myDataSet.Tables["SendBox"].DefaultView;
DataGrid1.DataBind();
}
else
{
DataGrid1.Visible=false;
}
}
这是自定义的数据访问的函数:
使用ADO.NET访问数据库的途径二:
Connection -> DataAdapter -> DataSet -> DataGrid
工作流程:
1指定数据源,连接Microsoft SQL Server 7.0以上版本,使用SQL Server .NET Framework数据提供程序的SqlConnection对象。
2写入相关的SQL语句,创建访问数据表的DataAdapter对象。
3使用DataSet对象存放数据表,填充至DataAdapter对象。
4使用DataGrid控件绑定数据,显示数据表。
6 展望
从纷繁芜杂的关系数据模型中抽象出概念模型。这样开发人员可以只需着眼概念模型,而不必要去关心纷繁芜杂的关系数据模型,从而提高开发效率。
那么如何能够做到这一点?
答案就是:Language-Integrated Query 和 ADO.NET Entity Framework,也就是下一代的ADO.NET.
ADO.NET Entity Framework包括
1. 实体数据模型(Entity Data Model),开发人员通过EDM抽象出非常合适的模型。
2. 非常强大的client-view/mappping引擎,用于映射数据关系
3. Entity SQL语言和LINQ查询对EDM schemas的全面支持
4. ojbect services layer供您选择以何种方式去处理查询结果。比如(行,列或作为对象)。
5. 提供一个开放的模型使ADO.NET Entity Framework可以处理其他的数据存储。
参考文献
[1] 求是科技,张文仲编著,ASP.NET网络开发技术.北京:人民邮电出版社,2006
[2] 刘振岩,基于.NET的Web程序设计:ASP.NET标准教程.北京:电子工业出版社,2006
[3] [美]H.M.Deitel,J.Listfield等著,C#大学教程.葛昊晗,李强等译.北京:清华大学出版社,2006
写于2007年1月15日