基于ADO.NET数据库访问技术浅析
2012-04-29李成楠杨晶
李成楠 杨晶
引言
Microsoft ActiveX Data Objects(ADO).NET是一种把基于Microsoft.NET的Web应用程序以及Microsoft Windows应用程序连接到诸如SQL Server数据库或XML文件等数据源的技术。ADO.NET专门为诸如Internet这样的无连接的工作环境而设计,它提供了一种简单而灵活的方法,便于开发人员把数据访问和数据处理集成到Web应用程序中。
ADO.NET结构作为一个高效的.NET程序语言。其混合了函数语言和物件导向程序编制语言,并且完美的是用于编程、算法、技术和探索性开发,因此可以在使用的过程当中感受到趣味性和吸引力。
1 组成及功能
ADO.NET是微软.NET框架的一部分,它由一组工具和层组成,应用程序可以借此与基于文件或基于服务器的数据存储很轻松地进行通信和管理。ADO.NET是在.NET Framework环境中用于访问数据库的一组组件类。在基于.NET Framework开发的应用程序中,如果要访问数据库,是用ADO.NET是目前的最佳选择。ADO.NET是与C#和.NET Framework一起使用的类集的名称,用于以关系型的、面向表的格式访问数据。使用ADO.NET可以更容易地实现对关系和非关系数据的访问,并且ADO.NET统一了XML和关系数据访问,支持Internet上的多层应用程序,与上一代技术相比,ADO.NET可以扩充以支持更多的数据源。
ADO.NET可以使用XML作为通用的数据传送格式。只要处理数据的不同的平台有XML分析程序,就可以实现不同平台之间极好的互操作性。其次,ADO.NET具有十分强大的可伸缩性。对于Web应用程序来说,很难估计同一个时刻会有多少用户在提交访问。而在使用ADO时,ADO的可伸缩性不强通常合成为导致服务器崩溃的主要原因之一。而在ADO.NET中,由于对已经断开连接的数据集并不保存长时间的数据锁和数据连接,所以相比之下,服务器端的负荷就大大减少。
2 ADO.NET与ADO的差异
ADO.NET是一种基于Microsoft ADO的新技术,它并不是ADO的修订版,而是建立在ADO之上,用于处理数据的一种全新技术。ADO.NET在以前的ADO版本的基础上做了许多改进,大大简化了Web应用程序与数据库连接处理。ADO.NET与ADO可以共存。虽然大部分基于.NET的Web应用程序使用ADO.NET,但是通过使用.NET COM互操作服务可使ADO对.NET程序员仍然可用。
ADO.NET是一系列用于连接和处理数据源的类,与基于COM、依赖于连接并使用OLEDB访问数据的ADO不同。ADO.NET是为在无连接的环境中连接数据而特别设计的,这使得它成为基于Internet的Web应用程序的最佳选择。ADO.NET用XML作为在数据库与Web应用程序之间往返传输数据的形式,这确保了它比ADO具有更强大的兼容性和灵活性。
在ADO中,数据在内存中的表示形式为记录集,在ADO.NET中,它为数据集。他们之间有很大的差异。
3 ADO.NET的对象体系
ADO.NET可以在两种模式下工作:非连接模式和连接模式。其中,在连接模式下访问数据库,应用程序需要首先创建对数据库的连接,然后把命令发送到连接,再连接将命令传递到数据库,最后将从数据库返回的数据保存到DataReader对象中;而在非连接模式下,从数据库返回的数据被保存到ADO.NET中的DataSet组件中,该组件允许应用程序从数据库检索数据,并可以离线处理,然后创建新连接把对数据库的更新保存到数据库中。
3.1 连接对象
面向连接的部分是那些数据源交互和处理时必须要有打开的可用连接的对象。在ADO.NET中面向连接的部分主要包括如下对象:
(1)Connection对象表示一个数据源的开放式连接。用户必须首先创建一个Connection对象,然后再使用其它的对象来访问数据库。因此,Connection对象是ADO对象模型的基础。连接对象的例子有OleDb Connection、SqlConnection等。
(2)Command对象代表对数据源执行的命令。使用Command命令可以查询数据,并将查询结果返回给RecordSet对象。
(3)Parameter对象表示Command对象的一个独立参数。这个对象是SQL查询时的一个运行参数,或者是存储过程中的输入或输出参数。
(4)DataAdapter对象充当DataSet和数据源之间用于检索和保存数据的桥梁。DataAdapter类代表用于填充DataSet以及更新数据源的一组数据库命令和一个数据库连接。DataAdapter对象是ADO.NET数据提供程序的组成部分,该数据提供程序还包括连接对象、数据读取器对象和命令对象。
(5)DataReader对象是一个快速而易于使用的对象,可以从数据源中读取仅能向前和只讀的数据流。此对象具有最好的功能,可以简单地读取数据。
3.2 非连接对象
非连接对象是使用ADO.NET构建的。非连接应用程序通常尽可能晚地连接,并且尽早地断开连接。ADO.NET中非连接的部分主要需要如下对象:
(1)DataSet类是ADO.NET的主要成员之一,它是从数据库中检索到的数据在内存中的缓存,代表了一个或多个数据库表中数据的非连接视图。
(2)DataTablel对象代表在DataSet中的表。一个DataSet对象通常包含一个或多DataTablel对象。每个DataTablel对象又包含一个或多个DataColumn和DataRow。它以行或列存储数据。
(3)DataColumn对象代表表中的一列。
(4)DataRow对象代表来自表的关联数据的一行。
(5)DataView的一个主要功能是允许在Windows窗体和Web窗体上进行数据绑定。另外,可自定义DataView来表示DataTable中数据的子集。此功能拥有绑定到同一DataTable,但显示不同数据版本的两个空间。
(6)DataRelation对象代表通过共享列而发生关系的两个表之间的关系。每个DataR elation对象通过DataColumn对象与一对DataTable对象关联。通过匹配两张表中的列可以建立关系。
4 数据访问的3个典型阶段
数据访问有3个典型阶段:首先从数据源中访问数据,并把数据显示出来;然后进行数据处理;会后把更新后的数据返回到数据库。
4.1 访问数据
用户请求一个页面,页面创建SqlConne ction对象和SqlDataAdapter对象,使用SqlDataAdapter对象从数据库中生成一个DataSet,然后通过控件把DataSet返回给用户。
4.2 处理数据
生成DataSet后,用户就可以浏览并处理数据。浏览和处理数据的时候,客户端与Web服务器之间没有连接,Web服务器和数据库服务器之间也没有连接。DataSet的设计使得这种无连接的系统比较容易实现。由于DataSet是无状态的,所以可以在Web服务器和客户端之间安全传输而无需占用服务器资源。
4.3 更新数据库
用户完成浏览并修改数据之后,客户端把修改后的DataSet返回到页面,此页面用DataAdapter协调返回的DataSet与数据库中原始数据之间的变化。数据以XML格式先在客户端和Web服务器之间传送,然后在Web服务器和数据库服务器之间传送。
5 编程中的应用
在实际应用中,建立程序与数据库的连接如下:
(1)首先要导入所需要的命名空间;
(2)建立指向数据的数据连接;
(3)在此数据连接上,建立一个SQL语句,用来返回所需要用的数据集;
(4)打开数据连接,执行SQL语句,返回所需的数据集;
(5)关闭数据集,关闭数据连接。
相关的代码如下:
using System;
using System.Data.SqlClient;
using System.Windows.Forms;
string strConnect=”server=.//sqlexpress;integrated security=true;database=myData”;
SqlConnection con=new SqlConnection(strConnect);
SqlCommand cmd=new SqlCommand();
con.Open();
SqlDataReader reader=cmd.ExcuteReader();
reader.Close();
con.Close();
6 ADO.NET的好处
使用ADO.NET的好处分成以下类别:
互操作性:ADO.NET应用程序可以利用XML的灵活性和广泛接受性。由于XML是用于在网络中传输数据集的格式,因此可以读取XML格式的任何组件都可以处理数据。
可维护性:在已部署系统的生存期中,适度的更改是可能的,但由于十分困难,所以很少尝试进行实质的结构更改。
可编程性:Visual Studio中的ADO.NET数据组件以不同方式封装数据访问功能,帮助您加快编程速度并减少犯错几率。例如,数据命令提取生成和执行SQL语句或存储过程的任务。
结语
通过以上的介绍,首先,在ADO.NET结构和功能的基础上,分析了ADO.NET与ADO差异;其次,分别对ADO.NET的对象体系的主要对象进行了说明;最后,在编程中对数据库连接方法的实现。可以了解到ADO.NET为数据库的访问提供了一种全新的、简单高效的数据库访问技术,它使得数据编程变得更加容易;同时,也为编程人员提供了功能更为强大的数据访问方式。因此,ADO.NET在软件开发环境的发展中起到至关重要的作用和地位。
参考文献
[1] 何玉洁.数据库原理与应用教程.机械工业出版社,2010(9).
[2] 韩小祥,刘志军.C#程序设计.北京科海电子出版社,2009(4).