基于的ADO.NET数据库访问技术研究

2008-07-14 10:05
电脑知识与技术 2008年18期
关键词:语言

刘 莹

摘要: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-),女,湖北武汉人,助教,硕士,研究方向为数据库系统理论与应用。

猜你喜欢
语言
让语言描写摇曳多姿
多向度交往对语言磨蚀的补正之道
累积动态分析下的同声传译语言压缩
论语言的“得体”