刘 莹
摘要:ADO.NET是微软针对ADO的缺陷而重新设计的一种全新的数据库访问技术。阐述了ADO.NET的结构与数据模型:数据提供程序和数据集。探讨了利用ADO.NET技术访问数据库访问的方式,同时给出了采用C#语言所实现的ADO.NET数据库访问技术在数据库中编程中的具体实现方案。
关键词:C#语言;ADO.NET;数据库访问
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)18-2pppp-0c
Research on Database Accessing Technology Based on ADO.NET
LIU Ying
(South-central University For Nationalities College of Business,Wuhan 430000,China)
Abstract:This thesis introduces the data accessing technology based on ADO.NET,illuminates the structure ande the data model of ADO.NET:data provider and data set.It described the way of the database access in using ADO.NET technology.Then the solution with C# language has been presented to use the ADO.NET database accessing technology in database programming.
Key words:c# language;ADO.NET;Database Accessing
1 引言
ActiveX Data Objects.NET(简称ADO.NET)是Microsoft公司设计的一种新的数据访问技术。在.NET中,数据存取的任务都是通过ADO.NET完成。同以往的数据库访问技术相比,ADO.NET有很多数据处理的优势。ADO.NET是为关系数据访问和非关系数据访问设计的数据连接模型,它可以实现对数据源的非连接处理;另外ADO.NET新增了一些对象,如DataReader类可以产生一个只读的记录集,用来实现对快速读取数据。
2 ADO.NET的数据模型
ADO.NET有两个核心组件:数据提供程序和数据集。
数据提供程序(data provider)连接数据源,支持数据访问和处理。数据集(data set)支持数据以关联的方式,在断开连接的情况下独立地缓存数据,根据需要更新数据源。
2.1 数据提供程序
ADO.NET中的数据提供程序主要有两种:SQL SERVER数据提供程序和OLE DB数据提供程序
每个数据提供程序都是System.Data命名空间中的一个接口实现方式,专门用于特定的数据源。如SQL SERVER数据提供方式属于System.Data.SqlClient,支持SQL SERVER 7或更新版本。而OLE DB数据提供程序属于System.Data.OleDb命名空间,支持对SQL SERVER旧版本和其他数据库(Access、DB2、MySQL和Oracle)的访问。
以SQL SERVER数据提供程序为例,其中包含了3个主要的组件。
2.1.1 数据提供程序的连接类
SQL SERVER数据提供程序的连接类是SqlConnection,实现了System.Data.IDbConnection接口,用于实现与数据源的连接。
要与一个SQL SERVER数据库建立连接,首先引入命名空间:
using System.Data;
using System.Data.SqlClient;
然后创建连接字符串。连接字符串主要用于指定连接信息的参数,通常包括目标SQL SERVER实例名称,指定身份验证模式,数据库名等。
string constring=@”server=(local)sqlexpress;
integrated security=sspi;
database=northwind;”
最后创建连接,也就是SqlConnnection对象,同时将连接字符串作为参数传递给它
SqlConnection con=new SqlConnection(constring);
打开连接:
con.Open();
2.1.2Command对象
连接了数据库以后,可以通过Command对象执行sql命令或是存储过程来完成对数据库的一些操作。
首先创建命令字符串:
string sql=@”select count(*)from employees”;
然后创建Command对象:
SqlCommand cmd=new SqlCommand(sql,con);
其中sql作为参数将传递给cmd.CommandText属性,这个属性用来保存要执行的sql语句;con作为参数传递给cmd.Connection属性,其作用是将命令与数据库的连接关联起来。
最后执行命令:执行命令的方法有四种。方法的区别取决于sql代码的结果。执行命令的方法如下表所示:
表1 执行命令的方法
以刚建立的cmd命令为例:
cmd.ExecuteScalar();
2.1.3 数据读取器
数据读取器是实现了System.Data.IDataReader接口的对象。数据读取器用来读取查询的结果集。它是快速的、未缓存的、只向前移动的、只读的、已连接数据源的、逐行检索数据的数据流。数据读取器适用于只想读取和显示数据的时候。
首先实例化数据读取器:
SqlDataReader rd=cmd.ExecuteReader();
这里需要注意的是,由于SqlDataReader是抽象类,不能显示的实例化,必须执行SqlCommand的ExecuteReader()方法来获得SqlDataReader的实例。
接着,调用SqlDataReader的Read()方法来遍历返回结果集的每一行。在Read()方法中,如果存在下一行就返回true,并向前移动游标;如果没有下一行,就返回false。由于Read把游标移动到下一个记录,所以每次都必须手工调用这个方法。一般使用while循环来完成操作:
while(rd.Read())
然后访问数据:
在调用了Read()方法后,下一行就以集合的形式返回,存储在SqlDataReader对象中。如果要访问某一列的数据,可以使用许多方法。如果使用序数索引器方法(就像提供整数数组的索引一样),就给数据读取器提供列号以检索值:
Console.WriteLine(“{0}{1}”,rd[0],rd[1]);
也可以使用列名索引器,把列名传递给数据读取器:
Console.WriteLine(“{0}{1}”,rd[“EmployeeId”],rd[“LastName”])
使用列名索引器有很多优点。当表因为某个原因添加或删除一个或多个列时,扰乱了列的顺序,在使用序数索引器查找方法的代码中则会产生异常。而使用列名索引器可以解决这个问题。但为了快速得到结果,还是应该使用序数所引器的方法。
2.2 数据集
ADO.NET中的数据集是多层数据库应用程序开发的一大进步。数据集允许在本地高速缓存中存储和修改大量数据,把数据看成表,断开与数据库的连接,以脱机方式处理数据。
2.2.1 数据适配器
数据适配器对象在数据集和源数据之间起到桥梁作用。数据适配器对象使用Fill()方法将数据填充到DataSet的DataTable中去,并提供将异动的数据更新到数据源的能力。
数据集、数据适配器和数据源之间的关系如图1。
图1 数据集、数据适配器和数据源之间的关系
创建数据适配器:
SqlDataAdapter da=new SqlDataAdapter(cmd);
2.2.2 数据集
数据集对象是ADO.NET对象模型中最核心的对象。一个数据集对象就是一个记录集的集合,它相当于数据缓冲区。ADO.NET框架提供了记录集的所有数据库功能。
首先构造数据集:
DataSet ds=new DataSet();
然后调用SqlDataAdapter的Fill方法填充数据集
da.Fill(ds,”employees”);
经过以上填充,就把查询的结果填入数据集中,可以实现脱机处理数据。
3 小结
ADO.NET是开发数据库系统的重要技术。ADO.NET最突出的特性是可以采用非连接的方式的访问和处理数据。与ADO相比,ADO.NET只在必要的时候对数据库进行连接,当处理完毕后它将及时关闭连接,保证了虎踞堀服务器资源的可用性,使它可以为更多的用户服务,更加适合网络应用。
参考文献:
[1]James Huddleston.C#数据库入门经典[M].2版.北京:清华大学出版社,2006.
[2]万科,覃剑.Visual c#.NET程序设计基础与上机指导[M].北京:清华大学出版社,2007.
[3]王炜奇.基于ADO.NET的数据访问技术分析与应用[J].兰州工业高等专科学校学报,2007,14(2):37-40.
[4]张娜,张剑萍,朱玉文,等.ADO.NET数据访问技术的应用研究[J].北京农学院学报,2007,22(增刊2):188-190.
收稿日期:2008-04-03
作者简介:刘莹(1981-),女,湖北武汉人,助教,硕士,研究方向为数据库系统理论与应用。