APP下载

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

2009-10-29徐祥涛

中国新技术新产品 2009年17期

徐祥涛

摘要:ADO.NET是基于.NET平台下的数据库访问技术,本文阐述了ADO.NET的功能、结构和对象模型,给出了基于C#.NET的ADO.NET技术访问数据库的具体实现过程,并给出了部分实现代码。

关键词:ADO.NET; 数据集; 数据提供程序

1 引言

数据库访问技术一直是数据库应用系统开发中的难点和重点,也是每个数据库软件开发者必须要考虑的环节。ADO.NET微软最新的数据访问技术,是数据库应用程序和数据源间沟通的桥梁,主要提供一个面向对象的数据存取架构,用来开发数据库应用程序。

2 ADO.NET概述

ADO.NET是.NET Framework提供的一系列类,提供了对关系数据、XML和应用程序数据的访问,是.NET Framework 中最重要的组成部分。

2.1 ADO.NET的功能

ADO.NET是连接系统前、后端的关键。在典型的数据库应用体系结构中,用户和数据库系统的交互过程是:首先,用户通过用户界面向系统发出数据操作的请求,用户界面接收请求后传到ADO.NET;然后,ADO.NET分析用户请求,并通过数据库访问接口于数据源交互,向数据源发送SQL指令,并从数据源获取数据;最后,ADO.NET将数据访问结果传回用户界面。

2.2 ADO.NET的基本结构

ADO.NET将其组件区分为:"数据存取"与"数据操作"两大类,负责完成这些处理的两大中心组件是:数据集(DateSet)和数据提供程序(Data Providers)。数据集代表了实际的数据而数据提供程序就是用来连接数据库、执行命令和提取结果的。数据提供程序有两种:一种是SQL Server数据提供程序;另一种是一般的数据提供程序,它可以与任何一个OLEDB数据源通信。数据提供程序包含下列组件专门负责数据操作并且能够以快速、顺序和只读方式来存取数据:Connection、Command、DataReader和DataAdapter。

3 使用ADO.NET访问数据库

对数据库进行操作,首先是与数据库建立连接,其次发出SQL命令或存储过程进行相应操作,之后由数据集返回所需的数据记录,最后将修改后的结果返回到数据库。

3.1 连接数据库

要使用ADO.NET从数据库发送和检索数据,必须首先创建对数据库的连接。连接是客户应用程序和ADO.NET之间的管道,在ADO.NET的两种工作模式(连接模式和非连接模式)中都使用。ADO.NET提供了两个类来创建连接,第一个是通用的OleDbConnection类,它创建处理不同的数据库类型的连接。第二个是SqlConnection类,它创建的连接只处理只处理SQL Server数据库,并优化了性能。

本文以连接SQL Server数据库为例,首先建立一个名为SCN的SqlConnection对象,再使用ConnectionString属性来设置要连接的数据库种类和所在的位置,最后用Open方法来打开数据库,如下所示:

SqlConnection SCN = new SqlConnection();

SCN. ConnectionString =

"Persist Security Info=False;User id=sa;pwd=frock;database=Student;server=(local)";

SCN.Open();

3.2 操作数据库

创建了数据库连接之后,下一步就是通过连接发送请求来选择数据。对数据库执行命令操作,如进行数据的查询、修改、添加、删除等,实际上就是传送SQL指令,SQL指令封装在Command对象中。操纵数据库可以通过多种方式来实现,常用的对象是SqlCommand对象(表示一个SQL操作或者一个存储过程)和SqlDataAdpater对象(把一个SqlCommand提交给SQL Server数据库)。

本文以SqlCommand对象为例,其过程为:先定义一个SqlCommand对象,再通过设置它的CommandText属性来指定对数据库进行的操作(SQL语句可以是查询、添加、修改和删除等),然后指明SqlCommand对象所用到的SqlConnection对象。

SqlCommand SCM = new SqlCommand();

SCM.CommandText = "select * from tdbStudent";

SCM.Connection = SCN;

还有一种更简便的方法如下:

SqlCommand SCM = new SqlCommand("select * from tdbStudent", SCN);

根据不同的操作目的选择执行命令的方式,SqlCommand 特别提供了以下对 SQL Server 数据库执行命令的方法。

3.3 获取数据集

ADO.NET 支持面向流的数据访问(如DataReader 对象)和基于集的数据访问(如DataSet 对象)。

3.3.1 面向流的数据访问

可以从数据库中顺向逐条从数据库中读取由SELECT 命令返回的只读数据流,而且当前内存中每次只存一条记录。DataReader对象的读取数据方式是先通过Connection 对象和数据库联机,再通过Command 对象的ExecuteReader 方法执行SQLSELECT 命令获取查询的数据, 再通过DataReader 对象的属性和方法,将获取的数据以只读方式从当前的数据记录顺向逐条处理,最后将数据放入内存或直接显示在窗体上。但是要注意在DataReader 开启时, 必须和数据库一直保持联机, 此时Connection 只提供给DataReader 使用, 必须等到DataReader 关闭后, 才允许执行其他Connection 命令。DataReader 适用于只需返回一个简单的只读记录集的情况。DataReader 最主要的方法是Read, 用于从查询结果中获取数据行。DataReader 每执行一次Read()方法, 就返回一个Bool 值, 说明是否有数据可读, 并且所检索的数据向下走一行。

SqlDataReader SDR;

SDR = CM.ExecuteReader();

this.lstUser.Items.Clear();

while (DR.Read())

this.lstUser.Items.Add(DR[0].ToString());

3.3.2 面向集的数据访问

数据适配器, 包含将数据从数据库中取出的方法, 和将数据写回数据库的方法, 是数据库和DataSet 之间沟通的桥梁。DataAdapter 对象使用Command 对象执行SQL 命令, 将从数据库获取的数据送到DataSet, 此时便可使用DataTable 对象来存取数据表, 将DataSet里面的数据经过处理后再送回数据库。

SqlDataAdapter SDAP = new SqlDataAdapter();

SDA.SelectCommand = selectCMD;

DataSet DS = new DataSet();//4 填充DataSet

SDAP.Fill(DS, "student");

Page.Response.Write("

"); //5 显示其中的DataTable对象中的数据

for (int i = 0; i < DS.Tables[0].Rows.Count; i++)

{

Page.Response.Write("

");

for (int j = 0; j < DS.Tables[0].Columns.Count; j++)

{

Page.Response.Write("

");

}

Page.Response.Write("

");

}

Page.Response.Write("

" + DS.Tables[0].Rows[i].ItemArray[j] + "
");

4小结

ADO.NET是与数据源交互的.NET技术。有许多的Data Providers,它将允许与不同的数据源交流——取决于它们所使用的协议或者数据库。然而无论使用什么样的Data Provider,你将使用相似的对象与数据源进行交互。

参考文献

[1] 刘乃丽.ASP.NET 2.0 网络开发详解[M].北京:电子工业出版社.2008.

[2] 茅健.Visual Basic.NET+SQL Server全程指南[M].北京:电子工业出版社.2008.

[3] Michael Ekedahl著,马海军,杨继萍等译. Visual Basic.NET程序设计高级教程[M].北京:清华大学出版社.2005.