ADO.NET的应用

2024-07-01

ADO.NET的应用(精选9篇)

ADO.NET的应用 篇1

ASP.net技术是目前交互式网站建设的主流技术, 其全新的技术架构将使编程变得更加方便。本案例采用VS2005作开发工具, 使用C#为开发语言, 后台数据库采用SQLServer 2005, 系统采用B/S结构, 采用IIS5.0作为网站发布程序。

(1) 数据库设计

创建数据库名为product, 表的名称为product_tb, 该表的结构及内容如图1所示。

product_tb表中各字段的含义如表1所示。

(2) 为Check Box List中的选项绑定数值

1) 在VS2005中新建一个ASP.net网站

在网站首页上添加一个Check Box List组件, 设置其ID值CBLproduct, 设置其Repeat Direction属性值为Horizontal。同时添加一个Grid View组件, 用于显示对应选中项的详细信息, 设置其ID值为MYGV。

2) Page_Load () 方法完成Check Box List选项内容的绑定与显示, 具体代码如下:

(3) Check Box List中的选项获取

以选中项为查询条件读取数据库中的记录信息并显示在Web页面上的实现方法。

1) 方法一

通过CBLproduct.Items.Count属性设置循环次数, 采用循环语句遍历Check Box List的所有列选项, 具体代码如下:

2) 方法二

使用IF语句, 通过CBLproduct.Items[].Selected属性逐一判断Check Box List中的选项是否被选中, 如选中设置标志参数的值为其数据库中的ID。用ID作为查询条件, 构造查询语句。

3) 两种方法比较

方法一代码简洁, 处理效率较高, 方法二适用于Check Box List选项数目较少且选项数目固定的场合, 如果选项数目较多, 需设置多个标志参数, 同时如果选项数目变化, 应重设标志参数和查询条件, 可见方法一的通用率和移植性较强。

4 运行效果

如图2。

ADO.NET的应用 篇2

一.ADO.NET基础

程序和数据库交互,要通过ADO.NET进行;通过ADO.NET就能在数据库中执行SQL了。ADO.NET中提供了对不同数据库的统一操作接口(ODBC)。另外还有一种操作数据库的接口是JDBC。

ADO.NET中通过SqlConnection类创建到SQL Server的链接,Sqlconnection代表一个数据库的链接,ADO.NET中的链接等资源都实现了IDisposable接口。

实现了IDisposable接口的对象,在使用完了,要进行资源的释放。调用Dispose()方法。

连接方式访问数据库,连接要打开,使用完要关闭。关闭之后,还可以再打开,这就是Close和Dispose的区别。Dispose(),是完全释放资源。

现在来测试一下,连接数据库是否成功了。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;//使用ADO.NET技术,必须要导入这两个命名空间using System.Data;using System.Data.SqlClient;//namespace ADO.NET1{ class Program { static void Main(string[] args) {//创建数据库连接(连接字符串)string sqlCon = “server=.;database=DB_MyStudentLife;uid=sa;pwd=Password_1”;SqlConnection scon = new SqlConnection(sqlCon);//打开数据库连接 scon.Open();//测试,判断数据库的连接状态if (scon.State == ConnectionState.Closed){ Console.WriteLine(“连接数据库失败”);}if (scon.State == ConnectionState.Open){ Console.WriteLine(“成功打开连接数据库,连接成功”);}Console.ReadKey(); } }}

测试效果图:

最后我们来看看SqlConnection对象的内部原理吧:使用反编译工具reflector就可以;

1.从图中,我们看出来,SqlConnection继承了DbConnection类,实现了ICloneable接口

2.ICloneable接口里面是啥样子呢,我们来看一下,反编译:

3.接下来,我们看下Dbconnection类:

从图中可以看出,Dbconnection类是一个抽象类,继承了Component类,实现了IDbConnection接口,和IDisposable接口,下面我们分别来看看这几个

4.Component类:

看得出来这个类,也实现了IDisposable接口哦,

好了,其他还是来看看IDisposable接口内部的神秘面纱吧:

看得出来,IDisosable定义了一个Dispose(),抽象无返回值的方法,

ADO.NET的应用 篇3

关键词:ADO.NET; 数据库; DataSet; DataReader; DataAdapter

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15-30614-02

Research of Database Access Technology Based on ADO.NET Method

LI Yan

(Jingdezhen Ceramic Institute,Jingdezhen 333001, China)

Abstract:For the sake of much better and flexible developing the database application's softs, we need to study ADO.NET about database access mechanism and understanding the ways of the use of ADO.NET about the aspect of connecting to a database,operating and accessing data. ADO.NET has added many new objects and programming interface such as Dataset, DataReader,DataAdapter. It makes the operation of database simpler. This article introduces database access technology using ADO.NET method by explaining the principle of data exchange and the use of the model for data access object.

Key words:ADO.NET; Database; DataSet; DataReader; DataAdapter

1 引言

数据库应用软件在计算机应用领域占有相当大的比重,其应用范围已经越来越广泛,无论是办公自动化、生产流程控制、局域网、Intranet/Internet以及各种各样的管理系统都离不开数据库。

在对一个数据库应用程序进行开发时,从开发者的角度而言,首要的技术环节就是要解决如何访问数据库。只有解决好这个问题,我们才能更加方便高效的使用数据库应用软件。

但是当今数据库种类众多,几乎每一种数据库都有自己的数据格式,要想访问这些数据就必须依靠特定数据格式的驱动程序,而这些驱动程序在使用上的千差万别,又为数据库应用软件的开发带来了不少麻烦。

为了解决这个问题,微软开发出了ADO,这是一组COM(Component Object Model)组件。它通过一个易于使用的封装类提供对底层数据的访问,从而使得对数据库的操作更加简单。ADO.NET则是在ADO基础上开发出的数据访问框架的最新产物,它是.NET框架的一部分,ADO.NET比ADO的功能更加强大,是在.NET代码中访问数据库的最好工具。深入研究ADO.NET的数据库访问技术对于数据库应用软件的开发具有十分重要的意义。

2 ADO.NET的体系结构

就其本质而言,ADO.NET是支持数据库应用程序开发的数据访问中间件。ADO.NET建立在.NET Framework提供的平台之上。它是使用Microsoft .NET Framework中的托管代码构建的,这意味着它继承了.NET执行时环境的健壮性。ADO.NET主要是用来解决Web和分布式应用程序的问题,它由.NET Framework(提供了对.NET应用程序的数据访问和管理功能)中的一组类或命名空间组成。

ADO.NET是用来处理基于Web应用程序所需的无连接计算环境。无连接的设计支持ADO.NET方便地伸缩企业应用程序,因为在每个客户机系统和数据库之间并没有使用开放连接。而是在开始客户端连接时,暂时打开一个到数据库的连接,从数据库服务器中检索需要的数据,然后关闭连接。客户端应用程序然后使用与数据库服务器所维护的数据存储完全独立的数据。客户端应用程序可以定位数据的子集,修改该数据,并将该数据一直缓存在客户机中,直到应用程序指示将所有变化传回到数据库服务器。这时会暂时打开一个到服务器的新连接,对客户端应用程序所作的所有修改都被传回到更新批处理中的数据库,同时关闭连接。

支持这种无连接环境的核心ADO.NET组件是DataSet。DataSet本质上是一个缩小的内存中数据库,它的维护独立于后台数据库。只有在填充DataSet或者将DataSet中的数据变化传回到数据库时,才会打开到数据源的连接。这种无连接的计算环境将系统开销最小化,并改进了应用程序的吞吐量和可伸缩性。ADO.NET DataSet提供的内存中数据库提供了在成熟的数据库中可以找到的许多功能,包括支持数据关系、创建视图的能力、支持数据约束以及外键约束。

在ADO.NET设计中,支持无连接的、基于Web的应用程序是其中一个重要特性,然而,这并不是ADO.NET的全部功能。无连接模式也可以用于Web应用程序,但它并不是客户端/服务器和桌面应用程序的最佳模式。当在连接方式下运行时,可以更好更高效地实现这些类型的应用程序。为了支持这种连接风格的计算,ADO.NET提供了DataReader对象。DataReader主要使用连接方式提供了快速只向前的游标风格的数据访问。虽然DataSet提供了无连接的Web应用程序的基础,但DataReader支持桌面和客户端/服务器应用程序所需的快速连接风格的数据访问。

3 ADO.NET访问数据库的模式

Windows平台下的ADO.NET主要有3种访问数据库的模式,分别为OLEDB模式、ODBC模式和SQLCLIENT模式,另外还有其他数据访问模式,如对Oracle数据库的访问可以使用专用的Oracle模式。

3.1 OLEDB模式

OLEDB模式主要用于访问OLEDB所支持的数据库。OLEDB是Microsoft公司开发的一种高性能的、基于COM的数据库访问技术,OLEDB和其他Microsoft公司数据库技术的不同之处在于其提供通用数据访问的方式。OLEDB数据提供程序通过OLEDBConnection对象提供了使用OLEDB公开数据源的连接,以及与Microsoft SQL Server的连接。

3.2 ODBC模式

ODBC模式主要用于访问ODBC所支持的数据库,它是Windows平台的一种通用数据访问方式。一般在Windows平台下存在的数据库都可以通过建立系统DSN来实现对数据库的调用。

3.3 SQLClient模式

SQLClient只用于访问MS SQL Server数据库,是ADO.NET中比较特殊的组件。当然,MS SQL Server也是OLEDB和ODBC所支持的,因此也可以通过OLEDB和ODBC模式来访问MS SQL Server,但实验证明对访问MS SQL Server来说,采用SQLClient模式比OLEDB和ODBC模式效率更高,所以使用MS SQL Server作为数据库开发应用程序时,最好使用SQLClient模式访问。

4 ADO.NET的主要对象

ADO.NET中有很多重要的对象。这些对象主要实现两个主要的功能:(1)数据访问:用于访问数据库中数据和操作数据库的类型;(2)数据表示:用于包含数据库数据(如数据表)的类型。这两种类型之间联系密切,在数据库开发中两种类型都会用到。

ADO.NET包含很多重要的对象,其中Connection,Command,DataReader, DataAdapter是数据访问类,其他的如:DataSet,DataTable, DataView等是数据表示类。通过使用这些对象,使得对数据库的操作更加简单。

4.1 Connection对象

在 ADO.NET 中,使用 Connection 对象连接到特定的数据源。使用的 Connection 对象取决于数据源的类型。创建Connection对象时,应在连接字符串中提供与DBMS通信必要的信息,如数据库的位置、用于认证的用户名和密码以及要访问的DBMS中的数据库。

所有其他ADO.NET数据访问类都依靠Connection与数据库进行通信。

数据库连接只在传输数据时才打开,因此创建Connection实例时并不自动连接数据库。Connection定义了Open()和Close()方法,用于控制连接何时可用。

4.2 Command对象

Command对象提供与数据库交互的主要方法。可以用Command对象来执行SQL语句、运行存储过程等。

要使用Command对象执行命令,有三种选择,有些命令不返回结果,这种情况下就可以使用Command.ExecuteNonQuery()方法;有些命令返回一个结果,就需要使用Command.ExecuteScalar()方法;如果是返回多行命令,就应用Command.ExecuteReader()方法。

对于不同的数据库调用模式,使用的Command是不同的,对应的Command要与其对象模式相对应。

4.3 DataReader对象

使用DataReader可以从数据库返回一个只读的、仅能向下滚动的串流(Stream),而且当前内存中每次仅存在一条记录。

在程序开发的过程中,开发人员经常需要执行一些简短的操作,比如访问单独的用户名和密码。在执行这些操作时,就可以直接使用DataReader对象。

使用DataReader对象时,首先必须调用DataReader.Read()方法选择结果集中的一行,再不断调用该方法来移动DataReader,获取数据信息。获取到一行时,Read()方法返回True;否则返回False。

4.4 DataAdapter对象

在ADO.NET的核心数据访问对象中,最后一个是DataAdapter。

DataAdapter用于从数据源检索数据并填充到DataSet中的表,它还将对DataSet的更改解析回数据源。DataAdapter使用.NET Framework数据提供程序的Connection对象连接到数据源,并使用Command对象从数据源检索数据以及将更改解析回数据源。

DataAdapter最常用的两个方法是DataAdapter.Fill()和DataAdapter.Update()。Fill()方法从数据库中获取数据;Update()方法更新数据库中的数据。这两个方法都可以用于数据集或单个数据表。

4.5 DataSet对象

DataSet是ADO.NET的核心,它是从数据源中检索到数据在内存中的缓存,处理从数据存储中读出的数据,并以离线方式存在于本地内存中。可以使用相同的方式来操作不同数据来源取得的数据。不管底层的数据库是SQL Server还是Oracle,DataSet的行为都是一致的。

在DataSet中可以包含任意数量的DataTable,且每个DataTable对应一个数据库。一般来说,一个对应DataTable对象的数据表就是一组DataRow与DataColumn的集合。可以使用这些对象与DataRelation对象互相关联。

DataSet可将数据和架构作为XML文档进行读写。数据和架构可通过HTTP传输,并在支持XML的任何平台上被任何应用程序使用。开发人员可以使用WriteXmlSchema方法将架构保存为XML架构,并可以使用WriteXml方法保存架构和数据。若要读取既包含架构又包含数据的XML文档,可以使用ReadXml方法。

5 ADO.NET的运行模式

ADO.NET的运行模式主要分为以下几个步骤:(1)用户通过Web方式查寻数据库时,调用一个ASPX过程;(2)在ASPX网页的代码中使用ADO.NET的Command对象对数据执行查询操作;(3)对数据库的访问首先建立在连接并执行查询命令,然后从数据库中读取数据;(4)数据被存放在DataSset对象中,从数据库返回的是只读的信息;(5)将这些信息显示在页面上;(6)断开与数据库的连接。

6 结束语

ADO.NET集合了所有用于数据处理的类,是.NET数据库应用程序最终的解决方案,正在成为现今数据库开发的一种潮流,并代表了未来技术发展的方向。由于目前网络数据库是主流,ADO.NET在其运行效率、存取速度以及网络负载平衡等方面的均衡表现,使得它具有顽强的生命力。在进行数据库应用软件开发中,使用ADO.NET可以极大的帮助你以一种更加高效的方式来构建并完成任务。

参考文献:

[1]David Sceppa. ADO编程技术[M]. 北京:清华大学出版社,2001.

[2]张跃廷,韩阳,张宏宇. C#数据库系统开发实例精选[M].北京:人民邮电出版社,2007.6.

ADO.NET的应用 篇4

随着因特网技术的迅速发展和普及,以及当前网络对数据资源的强烈需求,将Web服务器与数据库技术相结合已成为近年来因特网应用的热点之一。目前流行的B/S(Browser/Server)三层体系结构,能充分共享Web资源,使用方便、安全高效,也充分利用了数据库系统中宝贵的信息资源。

Microsoft.NET是支持新一代互联网的系统平台,.NET Framework是.NET平台的基础,在.NET框架中,ADO.NET是ASP.NET(XML Web Services和Web Forms)和Windows Forms应用访问各种数据(如RDBMS,XML文档)的标准服务,它能处理当今n层的Web应用程序所要求的非连接数据体系结构,在访问SQL Server数据库时,性能优越,得到了广泛应用。

2 ADO.NET

C#是专为.NET平台而设计的一种全新的程序语言,使用C#既可以编写Web应用程序又可以书写Windows应用程序,无论在项目的哪一个模块下,访问数据库是开发程序中最重要也最常用的部分,.NET框架提供了ADO.NET(Active X Data Objects.NET)来支持对数据库的访问,它是微软在.NET Framework中创建分布式和数据共享应用程序的编程接口,是ADO的升级版本,它建立起数据库应用程序和数据源之间沟通的桥梁,提供面向对象的数据存取架构,是目前开发数据库应用程序的主要接口[1]。ADO.NET包含两个核心组件:Data Set(数据集)和.NET数据提供程序,使用这些组件可以从数据操作中分解出数据访问。

2.1 Data Set对象

Data Set对象是支持ADO.NET的断开式、分布式数据方案的核心对象[2],是专门用于实现独立于任何数据源的数据访问而设计的,主要功能是在内存中暂存并处理各种从数据源中所取回的数据,可以看成Data Set就相当于存在于内存中的一个数据库,通过Data Adapter对象与数据库做数据交换。它可以用于多种不同的数据源,既可以用于XML数据,也可以用于管理应用程序本地的数据。它包含了一个或多个Data Table对象的集合,Data Table相当于内存中的一个数据表,包含数据行的集合Rows、数据列的集合Columns。Data Set通常用来在应用程序与数据库服务器断开连接后保存取得的数据,在离线时,Data Set能独自完成数据的新增、修改、删除、查询等操作,而不必局限于和数据库联机时才能做的数据维护工作,如此一来,就可以避免客户端和数据库服务器联机时,而客户端不对服务器做任何操作,却一直占用数据库服务器资源,这种处理方式提高了数据库的延展性。

2.2 通过.NET数据提供程序访问数据源

.NET数据提供程序是为C#应用程序提供访问数据源的接口,用于实现对数据库的连接、执行命令和获取数据查询的结果。在C#中ADO.NET通过.NET数据提供程序来访问数据源,其访问方式如图1所示[3]。

由图1可知,ADO.NET通过4个.NET数据提供程序来访问数据源。

(1)DB.NET数据提供程序:由于ADO.NET完全兼容于OLE DB兼容数据库,因此,无论采取的是Access、SQL Server、Visual Fox Pro、Informix、Oracle、d Base或其他数据库,只要该数据库有OLE DB驱动程序,ADO.NET就能够加以访问。ADO.NET通过测试的OLE DB提供程序。

1)LOLEDB:用于SQL Server6.5以前版本的Microsoft OLE DB提供程序

2)DAORA:用于Oracle的Microsoft OLE DB提供程序

3)crosoft.Jet.OLEDB4.0:用于Microsoft Access数据库的OLE DB提供程序

(2)SQL Server.NET数据提供程序:用来访问SQL Server7.0或更新版本的数据库,由于使用其自身的协议(Tabular Data Stream)与SQL Server沟通,此协议无须依赖OLEDB,而直接由通用语言运行库CLR(Common Language Runtime)管理,因此使用SQL Server.NET数据提供程序访问SQL Server数据库比使用OLE DB.NET数据提供程序访问数据库效率更佳。采用SQL Server.NET数据提供程序,它主要包含4核心对象来完成对数据库的访问,其名称和功能如表1所示[4]。

3 利用ADO.NET访问数据库

ADO.NET主要包括Connection、Command、Data Reader、Data Adapter和Data Set对象,这5个对象提供了两种访问数据库的方式,如图2所示,方式一是利用Connection、Command、Data Reader对象,这种方式只能读取数据库,即不能修改记录,若只是想查询记录的话,这种方式的效率要高些;方式二是利用Connection、Command、Data Adapter和Data Set对象,这种方式灵活,可以对数据库进行各种操作[5]。

针对不同的数据库,ADO.NET提供了多套类库,若要使用SQL Server数据库,需要在页面中导入如下的命名空间:using System.Data.Sql Client;

下面在VS.NET环境下,通过创建基于C#的Windows应用程序项目来分析ADO.NET提供访问数据库的两种方式,进而总结ADO.NET访问数据库的一般步骤。

3.1 使用Data Reader对象访问数据库

该例要实现的功能:建立一个Windows应用程序,读取SQL Server 2000中xsgl数据库的Course表中的记录,将课程的号码、名称和教师的姓名显示在文本框中。其运行效果如图3所示。

(1)在SQL Server 2000中建立xsgl数据库,该数据库内Course表中各字段的设置如图4所示。

(2)界面设计,选中当前窗体Form1.cs,在属性窗口中设置text属性为“显示course表的数据”,即指定窗体的标题,在窗体Form1.cs上添加一个文本框,其name保持默认设置,并允许多行显示。

(3)双击窗体,进入代码窗口,在程序中加入命名空间:using System.Data.Sql Client;

(4)在Form1_Load事件内的代码为:

(5)使用Data Reader对象读取数据库方式的步骤

1)Sqlconnection对象创建数据连接。

2)Sqlcommand对象执行SQL命令并返回结果。

3)Sqlcommand对象的Execute Reader方法创建Data Reader对象。

4)Data Reader对象的Read方法读取数据表中的记录,并把数据显示在数据控件中。

5)关闭数据阅读器的同时关闭数据库连接。

其中Data Reader对象以在线的方式使用数据库,在关闭数据阅读器的同时关闭数据库的连接。

3.2 使用Data Set对象访问数据库

该例要实现的功能:使用Data Set对象访问xsgl数据库中student、score、course3数据表内容,产生3个Data Table对象,并将这3Data Table对象名称依次命名为学生表、成绩表、课程表,然后将3Data Table对象加入到组合框cbotable中,此时只要通过cbotable控件就可查询其他对象的数据,并显示在data Grid1控件上。例如:选择成绩表,单击查询按钮,在data Grid1控件上显示的内容如图5所示。

(1)在xsgl数据库中增加student、score两个表的定义,定义表的结构如图6所示。

(2)界面设计。

(3)在程序中加入命名空间:using System.Data.Sql Client。

(4)定义公用变量:Data Set mydataset。

(5)在Form1_Load事件内的代码

(6)“查询”的单击事件代码:

//把组合框中选中的Data Table对象作为数据源赋给//data Grid1实现数据绑定。

data Grid1.Data Source=mydataset.Tables[cbotable.Text];

其中,在该例中,通过数据适配器对象mydataadapter1的Fill填充方法分别产生学生表Data Table对象、成绩表Data T-able对象和课程表Data Table对象,这3个对象构成了数据集集合Tables,在该集合中3个元素的编号从0~2,使用for循环依次把数据集集合Tables中各Data Table数据表对象的名称添加到组合框中,并把学生表Data Table对象作为数据源赋给data Grid1实现数据绑定。

(7)使用Data Set对象访问数据库方式的步骤:

1)使用Sqlconnection对象创建数据连接。

2)使用Sqlcommand对象执行SQL命令并返回结果。

3)建立数据适配器对象Sql Data Adapter。

4)建立Data Set对象。

5)用数据适配器对象的Fill方法填充dataset对象,创建Data Table对象。

6)为数据控件例如data Grid指定数据源实现绑定,显示数据表的内容。

其中数据适配器对象SQLData Adapter会自动打开和关闭数据库的连接,所以这种方式不需要明确打开和关闭数据库。

4 结语

ADO.NET是新一代的数据存取技术,对数据库的访问技术进行了讨论。在VS.NET环境下通过创建基于C#的Windows应用程序项目,分别对ADO.NET提供的两种数据库访问方式给出实例,总结了两种方式实现数据库访问的步骤,这种访问数据库的方式不仅适合于Windows数据库应用程序开发,而且为Web应用程序访问数据库提供了参考。通过分析了解到.NET平台如何通过数据提供程序实现对数据库的访问,A-DO.NET的5个主要对象如何为数据库操作服务,实例的实现为数据库后续操作奠定了基础。

参考文献

[1]曹祖圣,吴明哲,黄世阳,等.Visual C#.NET程序设计经典[M].北京:科学出版社,2006.

[2]杨树林,胡洁萍.C#程序设计与案例教程[M].北京:清华大学出版社,2007.

[3]白戈力,夏丽娟.ASP.NET中的数据库访问[J].内蒙古科技与经济,2006,(5).

[4]王宝祥.基于ADO.NET的数据库访问技术的应用研究[J].计算机应用与软件,2004,21(2).

ADO.NET的应用 篇5

1 ADO.NET与ADOX

在VB.NET中开发数据库程序要用到ADO.NET数据访问技术,ADO.NET是一个功能强大的数据访问接口,通过ADO.NET可以方便地访问数据库。它通过SQL Server和OLE DB两种不同的数据提供者可以访问各种不同的数据源。ADO.NET包含多个对象,它的结构如图1所示[2]。利用Connection、Command、Data Adapter和dataset对象,可以对数据库进行检索、修改、删除和更新等操作。Connection对象是所有数据库操作的前提;Command对象最主要的工作是通过Connection对象向数据源下达操作数据库的命令;Data Adapter对象是连接Data Set对象和数据源连接的桥梁,利用它的Select Command属性和fill方法可以将源数据填充到Data Set对象,利用它的Insert Command、Update Command、Delecte Command属性及update方法可更新数据源;Data Set对象是一个断开的记录集合,从数据源中建立Data Set对象后,它就和数据源完全断开。

如果要在程序中动态创建数据库和表,就需要引用“Microsoft ADO Ext.2.8 for DDL and Security”对象库,简称ADOX,其库文件名为Msadox.dll。ADOX是核心ADO对象的扩展库,可用于创建、修改和删除模式对象,如表格和过程还可用于维护用户和组,以及授予和撤消对象的权限[3]。

ADOX的对象描述如表1所示。ADOX常用方法有:Append(包括Columns,Groups,Indexes,Keys,Procedures,Tables,Users,Views对象),Create(创建新的目录),Delete(删除集合中的对象)和Refresh(更新集合中的对象)等等。

2 ADO.NET和ADOX在VB.NET数据库中的应用

2.1 在原有数据库上产生新表

如果仅仅是从已有数据表中产生新表,可写一条“select…into”SQL语句,再利用command对象的Execute Non Query方法即可实现。例如,在学生成绩管理系统中,有一个名为student的数据库,数据库中有一个名为“成绩表”的数据表,该数据表中有学号、姓名、性别、年龄、班级、语文、数学、外语等多个字段,这个表已有多条记录。现在把数学成绩大于等于90分的记录筛选出来构成一个新表,该表中只有三个字段:学号、姓名、数学。新表的名称由对话框输入。在窗体上放置一个命令按钮button1,编写它的click事件:

这种方法是在已有Access数据库上建立一个新表,通过OLE DB.NET数据提供程序与数据库相连,因此须在应用程序中添加System.Data.Ole Db命名空间。

2.2 动态创建新的数据库和表

如果要在程序中动态生成Access数据库和表,就要用到Microsoft ADO Ext.2.8 for DDL and Security对象库。

例如,在开发实验设备管理系统,需要在程序运行过程中创建一个数据库,数据库的名称由用户输入。然后在数据库中建立一个“设备档案”数据表,数据表中有3个字段,“设备编号”(字符型,宽度为8)、“设备名称”(字符型,宽度为20)、“购买日期”(日期型)。最后将数据表显示在Data Grid View1控件上,在Data GridView1控件中用户可任意添加、修改和删除记录。

首先新建一个Windows项目,通过“项目”菜单打开“添加引用”对话框,在COM标签中选中Microsoft ADO Ext.2.8 for DDL and Security组件。然后在程序中添加命名空间和公共变量:

为了更灵活地创建数据库,在窗体form1上放置一个Data Grid View1控件、一个Save File Dialog1控件和两个Button控件(名称分别为“创建数据库表”、“更新数据表”)。编写“创建数据库表”按钮的click事件,主要代码如下:

这里需要说明的是,在Button1_Click事件中只是设置了Save File Dialog1控件的有关属性,并调用了该控件的Show Dialog方法,而保存对话框打开后,按用户输入的文件名创建数据库表等操作应放到Save File Dialog1控件的File Ok事件中。代码如下:

程序运行后,单击Button1按钮就可创建用户所需的数据库了。如果在运行过程中用户要保存在DataGrid View1控件中所添加、删除、修改的记录,并将记录更新到数据库表中,则需单击“更新数据表”按钮,它的click事件主要代码如下:

本例通过Ole Db Command Builder对象自动生成数据适配器的Insert Command、Update Command和Delecte Command,将在数据集所做的数据变更写回数据源。也可根据程序实例把完整的插入、更新和删除的SQL语句赋给他们。显而易见,本例中的自动生成方法更快捷方便。

3 结论

利用VB.NET开发数据库程序时,如果只是从原表中产生新表,则只要使用ADO.NET中的Command对象及其Execute Non Query方法即可实现;如果要动态创建数据库和表,则需要结合ADOX对象的Create和Append方法实现。作者在利用VB.NET开发数据库应用程序中多次使用该方法,它提高了编程的灵活性和满足了特殊用户的需求,具有较好的实用价值。利用C#或ASP.NET开发数据库程序时,已可参照该实例动态创建数据库和表。

参考文献

[1]魏峥,王军,崔同庸.ADO.NET程序设计教程与实验[M].北京:清华大学出版社,2007.

[2]郑阿奇,彭作民.Visual Basic.NET程序设计教程[M].北京:机械工业出版社,2006.

ADO.NET的应用 篇6

数据库技术与Web技术相结合是当前应用的热点,其中最关键的就是Web数据库访问技术。ADO.NET以ActiveX数据对象(ADO)为基础,但与依赖于连接的ADO不同,ADO.NET是专门为了对数据存储进行无连接数据访问而设计的。

ADO.NET以XML(扩展标记语言)作为传递和接收数据的格式,与ADO相比,它提供了更大的兼容性和灵活性。当前的桌面应用程序大都推出B/S版本,对于Web应用程序,需要大量的访问数据库,如何提高Web数据库访问的效率和性能,是一个现实问题。

本文就ADO.NET在数据存取方面的性能优化,如何得到更快、更可信的数据访问代码进行分析。

2 ADO.NET概述

ADO.NET对象模型有两个核心组件:DataSet 和 .NET Framework,基本架构见图1。

(1) NET Framework 数据提供程序

它是面向连接的,由一组对象组成,包括 Connection,Command,DataReader和DataAdapter 等核心对象。主要功能为:连接到数据源,以便检索和修改数据源中的数据,并在数据源和 DataSet 之间起着桥梁的作用。

(2) DataSet

DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。即使断开数据链路,或者关闭数据库,DataSet依然是可用。DataSet在内部是用XML描述数据,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,所以DataSet可以容纳具有复杂关系的数据,而且不在依赖于数据库链路。DataSet 是数据的内存驻留表示形式,无论数据源是什么,它都会提供一致的关系编程模型;它可以用于多个不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSet表示包括相关表、约束和表间关系在内的整个数据集,通过 DataAdapter 控制其与现有数据源的交互。

3 ADO.NET性能优化模型

要开发出一个能以有效的方式来检索和存取数据的ASP.NET应用程序,就应该编写高效率高性能经过优化的ADO.NET数据访问代码,充分发挥ADO.NET的优势。为达到这一目的,需要对ADO.NET的不同优化技术和使用方法进行全面的分析,并给出客观的性能测试,特别是数据存取性能上。

ADO.NET数据访问的性能优化内容如图2所示,即:连接池的性能分析;.NET数据提供程序选择比较使用;DataReader,DataSet和RecordSet的性能比较分析;存储过程的性能分析;DataSet和DataReader的调用细节性能分析等。

3.1 连接池的性能分析

对于要访问数据库的ASP.NET应用程序,需要建立到数据库的连接并使用该连接进行数据存取。然而,与数据库建立连接要花费相对较长的时间进行协商,数据库连接也会消耗宝贵的系统资源如CPU处理能力、内存和网络带宽等。

解决办法:使用连接池技术(connection pooling),用来加速连接过程和避免浪费系统资源。连接池是一组简单的带有类似于连接字符串的连接。在开发一个多层应用程序时,有效地利用连接池可以提高应用程序的性能。图3展示了一个带连接池的多层应用程序。

ADO.NET中的连接池非常简单,在ADO.NET中的每个.NET数据提供程序(SQL Server和OLE DB)都可实现连接池。当请求一个新连接时,.NET数据提供程序会检查该请求已提供的凭据(数据库位置、用户名等),并在池中以匹配凭据的方式搜索打开的连接,如果找到有这样的一个连接,就将该连接递交给该请求;否则就只有创建并返回一个新建的连接。

当关闭连接对象时,.NET数据提供程序并不真正的关闭实际的数据库连接。它将连接对象标记为已关闭,并将其存储在连接池中。如果该数据库连接在特定的时间内未被再次使用,.NET数据提供程序就会真正的关闭此连接。

表1展示了有无连接池情况下,连续循环1 000次,建立连接(打开后马上关闭)所需要的时间对比。

以上测试数据非常明显表明:带有连接池的数据库访问应用程序其代价要小得多,其性能高得多。

3.2 ADO.NET数据提供者比较

要访问不同的数据源,选择适当的数据提供者,对性能的影响很大。

.NET数据提供者是处理特定类型的数据库的一组类“集”。所有的数据提供者都必须提供一组基本的功能,但不同的数据提供者可能有许多额外的属性和方法,只能被用来访问某一特定的数据存储。也就是说不同的数据提供者是对不同的数据存储类型进行专门的优化,使得其访问不同的数据源有不同的运行效率和性能。.NET架构共提供了4种数据提供程序,他们是:SQL Client,OLE DB,ODBC,Oracle Client 数据提供程序。其中SQL Client数据提供程序是专门针对SQL Server 7.0及以上版本作了优化。

SQL Client.NET 数据提供程序:用于使用SQL Server 7.0 及更高版本的中间层和单层应用程序;用于 SQL Server 的 OLE DB 提供程序 (SQLOLEDB) 与 OLE DB .NET数据提供程序一起使用。OLE DB .NET 数据提供程序:用于使用SQL Server 6.5 或较早版本的中间层应用程序,或任何支持 OLE DB .NET数据提供程序所使用的 OLE DB 接口中所列 OLE DB 接口(不支持 OLE DB 2.5 接口)的 OLE DB 提供程序;使用Access 数据库的单层应用程序。ODBC .NET数据提供程序:用于使用 ODBC 数据源的中间层应用程序和单层应用程序。Oracle .NET数据提供程序:用于使用 Oracle 数据源的中间层应用程序和单层应用程序;支持 Oracle 客户端软件 8.1.7 版和更高版本。

测试及分析:分别用SQL Client.NET,OLE DB.NET,ODBC.NET,Oracle .NET数据提供程序(由于不能访问SQL Server数据库,未作考虑)分别去连接SQL Server 数据库,并完成相关的连接、检索(简单的)、更改操作,测试其运行的效率。完成3项的测试内容为:

分别连接数据库所需时间,即cnn.open();分别从数据库中去检索出200 000条记录所需的时间,采用的方式是用DataAdapter去将数据检索出来并填充到相应的数据集(DataSet)中;分别对这200 000条记录中每条记录都更新一个字段值。通过命令的ExecuteNonQuery方法实现。运行结果见表2。

分析:从上表可以看出,SQL Client.NET效率最高,OLE DB.NET次之,ODBC.NET最慢。当数据库为SQL Server 2000时,无论是在数据库连接、数据提取、数据更新方面,SQL Client.NET提供程序执行效率都比OLE DB.NET提供程序和ODBC.NET提供程序都具有非常明显的优势。因此当连接微软SQL Server数据库时,建议采用SQL Client.NET数据提供程序访问数据库;而对于ORACLE 数据库,则采用Oracle Client.NET提供程序;对于Sybase,Informix,DB2,Access等数据库则采用OLE DB.NET提供程序来连接。

3.3 存储过程的性能优化

使用存储过程与直接使用SQL语句相比具有事务处理、执行速度、进程控制、安全性、减少网络通信流量、模块化等优势。

对存储过程的使用可以通过DataAdapter对象执行存储过程将数据送到DataSet或送往数据库;或直接通过Command对象执行存储过程将数据送到DataReader、界面或数据库中去。它们都可以使用参数对象向存储过程传递参数。

下面通过使用存储过程和直接传递SQL语句来进行测试比较:

将"delete from publishers"+";"+ "insert publishers (pub_name,city,state,country) values (@pub_name,@city,@state,@country)"+";"+"update publishers set state=@state"+";"+"select * from publishers"。分别编写存储过程和直接使用SQL语句分别执行5 000次。运行结果见表3。

分析:其实上面的测试代码并没有完全发挥出存储过程的优势,但可以看出它们之间的性能差别。存储过程通常是数据库交互的首选方法,尽管存储过程很多优点,但仍有某些情况不适合使用存储过程。存储过程存在的主要问题是可扩展性。

3.4 DataReader,DataSet和RecordSet性能比较

DataReader提供对来自数据源的数据流的只读,只向前访问;主要用于读取数据以填充像标签、列表或者DataGrid之类的数据感知控件,并最小限度使用资源,适合Web应用程序(无状态应用)。

DataSet专门针对断开连接开发的,用作数据的本地存储机制,为数据源提供一个本地的不连接的副本,通过DataAdapter与数据源保持同步,也可以用作独立的数据存储对象。主要用途:显示复杂的数据(来自于多个数据源或者相关数据)、写(编辑、创建、删除、写回)数据源中的数据。

RecordSet:为目前大量存在的 使用ADO的应用程序而提供的向前兼容版本。

三种形式在ASP.NET应用程序中的测试和分析:

测试内容:针对Northwind数据库中的Orders和Order Details两个表的内连来查询数据。其中Orders表的记录为830条。 使用SQL server.net 提供程序连接SQL Server。

循环100次测试的结果见表4。

对于Web应用程序而言,一般不会出现重复读取完整的缓存中的数据集,因为Web应用程序这样的无状态的程序,是不能利用由DataSet提供的高速缓存。在ASP.NET 中,DataReader效率最高,将数据从数据库中提取到内存中,DataSet的填充最耗时,但如果对于桌面程序,可能要反复使用缓存中的数据,这时DataSet效率最高,因为它耗时最小,这也是DataSet为断开的连接而开发的主要原因。

3.5 DataSet和DataReader的调用性能

ADO.NET中不同的调用方法、属性使用、数据类型使用都存在不同的性能差异。主要有:

(1) 基于名称或序号对数据元素的访问

使用基于名称的访问,DataReader要根据提供的字符串在其内部结构中定位该列,它要对结果集中的每行都要执行一个基于字符串的查找,必然浪费一定的性能;使用基于序号或索引的访问,性能要高一些。

(2) 使用适当的类型指定Get方法

使用与结果集中列返回的数据相对应的类型指定Get方法,可以提高应用程序性能。如DataReaderInstance.GetValue(i).ToString()与DataReaderInstance.GetString(i)在执行效率上是不同的。前者返回的是Object类型,还必须将其转换为字符串数据。而后者直接返回的是字符串数据,无须转换,性能当然会提高。

下面分别按名称和索引循环从库中取数据,结果见表5。

数据测试结果见表所示,从测试数据也说明DataSet和DataReader在使用上的性能优化差异。

4 结 语

对于ASP.NET应用程序而言,要开发出速度更快更可信的数据访问代码,提高数据访问性能,应该就其模型进行优化,在连接池,.NET数据提供者的选择,存储过程的使用,DataReader,DataSet和RecordSet的选择及其具体的调用方法等方面作出优化的选择。从而使系统的性能得到改善。

摘要:ADO.NET是.NET架构下的数据库访问技术,ADO.NET以XML作为传递和接收数据的格式,与ADO相比,它提供了更大的兼容性和灵活性。这里就其Web数据库访问提出一个性能优化模型,并对这些性能优化技术进行比较、讨论和测试。通过对测试结果的分析可知,要开发出一种高效检索和存取数据的ASP.NET应用程序,应该优化ADO.NET数据访问代码,应用这样的模式进行Web应用程序开发,能大大提高对数据库访问的效率和性能。

关键词:ADO.NET,性能,优化,模型

参考文献

[1]John Kauffman,Brian Matsik.ASP.NET数据库入门经典C#编程篇[M].张哲峰,黄翔宇,译.北京:清华大学出版社,2003.

[2][美]David Sceppa.ADO.NET技术内幕[M].梁超,张莉,贺锟,译.北京:清华大学出版社,2003.

[3]涂静.ADO.NET调用存储过程的方法[J].电脑与信息技术,2003(3):33 36.

[4]Microsoft Visual Studio.NET 2003文档[Z].2003.

[5]魏峥.ADO.NET程序设计教程与实验[M].北京:清华大学出版社,2007.

[6]David Sceppa.Programming Microsoft ADO.NET影印[M].北京:清华大学出版社,2003.

[7]刘友华..NET环境下数据库应用系统开发技术[M].北京:科学出版社,2004.

[8][美]巴克.VB.NET与ADO.NET数据库编程[M].北京:机械工业出版社,2003.

[9]田丽平.基于ASP.NET的科研管理信息系统的建立[J].内蒙古农业大学学报,2007(1):5 7.

[10][美]昌德.ASP.NET交互式Web数据库程序设计[M].韩江,译.北京:电子工业出版社,2005.

ADO.NET的应用 篇7

对于一个数据库开发者来说, 一个重要的环节就是研究数据库的访问技术。本文介绍了微软数据访问技术的主要几个阶段, 并对当前在.NET平台下被广泛使用并容易混淆的ADO与ADO.NET数据访问技术进行分析讨论, 希望和大家共同提高。

二、数据访问的历史

下面先来回顾一下微软数据访问技术所经过的几个阶段:

1、ODBC (Open Database Connectivity) 开放式数据库连接技术

它为异种数据库提供了统一的接口, 是第一个使用SQL访问不同关系数据库的数据访问技术。使用ODBC应用程序能够通过单一的命令操纵不同的数据库, 而开发人员需要做的仅仅只是针对不同的应用加入相应的ODBC驱动。

2、DAO (Data Access Object) 数据访问对象

它是一种面向对象的界面接口, 通过DAO/Jet功能可以访问ISAM访问数据库。不像ODBC那样是面向C/C++程序员的, 它是微软提供给Visual Basic开发人员的一种简单的数据访问方法, 主要用于操纵Access数据库。

3、RDO (Remote Data Objects) 远程数据库对象

在使用DAO访问不同的关系型数据库的时候, Jet引擎不得不在DAO和ODBC之间进行进行命令的转化, 导致了性能的下降, 而RDO (Remote Data Objects) 的出现就顺理成章了。它是一个到ODBC的面向对象的数据访问接口, 远程数据对象和集合为使用代码来创建和操作一个远程ODBC数据库系统的各个部件提供一个框架。

4、OLE DB (Object Linking and Embedding, Database) COM模型的数据库接口

随着越来越多的数据以非关系型格式存储, 需要一种新的架构来提供这种应用和数据源之间的无缝连接, 基于COM (Component Object Model) 的OLE DB应运而生了。它是一种底层的数据访问界面接口, 它能够处理任何类型的数据。

5、ADO (Active X Data Objects) Active X数据对象

基于OLE DB之上的ADO更简单、更高级、更适合Visual Basic程序员, 同时消除了OLE DB的多种弊端, 取而代之的是微软技术发展的趋势。

6、ADO.NET

ADO.NET是ADO的进一步演变。它不与ADO共享相同的编程模型, 却共享ADO的大部分功能。ADO.NET是一组处理数据的类。

三、ADO和ADO.NET的对照

由于在.NET平台下数据的访问是通过ADO或ADO.NET来实现的, 在实际的教学过程中很多学生认为这两种方法是一样的, 没有本质区别, 其实不然, 下面我们就对这两种方法做一下分析比较。

1、ADO技术

Active X Data Objects是微软的一种数据访问技术。他是DAO/RDO的后继产物, 扩展了DAO和RDO所使用的对象模型, 这意味着它包含较少的对象, 更多的属性、方法以及时间。它被设计用来和数据访问层OLE DB Provider一起协同工作, 以提供通用数据访问。如前面所述, OLE DB是一个底层的数据访问界面接口, 并基于微软的COM技术, 因此使用ADO可以访问各种数据源。其架构图如图1所示:

ADO有3个核心的组成对象:Connection、Record Set和Command

⑴Connection对象:它是到本地或远程数据的连接, 管理应用程序和数据库之间的通信。

⑵Record Set对象:是用来连接到一个记录集, 从而获得查询的结果, 这些结果以二维表格的方式给出。

⑶Command对象:它是用来处理重复执行的查询或处理需要检查在存储过程中输出和返回参数值的查询, 并将返回结果存在Record Set对象中。此外还可以利用OLE DB Provider所提供的支持来进行批操作和操纵数据库结构操作。

2、ADO.NET技术

ADO.NET是ADO的进一步演变。是一个用来存取信息和数据的API。它提供与OLE DB接口兼容的数据源的数据存取接口, 应用程序可以使用ADO.NET连接到这些数据源来进行数据操作;另外ADO.NET使用了强类型化数据, 编程代码更为简明, 对数据库的访问效率更高。其架构图如图2所示:

ADO.NET的核心组成对象有3个:Connection、Data Set和Command;另外还添加了许多新的对象和程序化接口, 如:Data Adapter、Data View、Data Reader等

⑴Connection对象基本等价于ADO中的Connection对象, 可以使用它连接数据库或断开与数据库的连接。另外还可以作为其他对象 (比如Data Adapter和Command对象) 与数据库通信以提交查询并检索结果的通道。

⑵Command对象结构上与ADO的Command对象相似, 是设置SQL命令、传递系统参数和取得数据结果等, 另外可以通过SQLCommand所提供的不同方法来执行各种查询, 比如为处理以XML格式返回结果的查询而设计的方法 (Execute XmlReader) 。

⑶Data Set对象正如其名称表明的那样, 它不同于一个Record Set, 它包含一个数据集。可以认为Data Set对象是包含多个Data Table对象 (存储在Data Set对象的Table集合中) 的容器。另外, 创建ADO.NET是为了帮助开发人员建立大型的多层数据应用程序。有时, 可能需要访问运行在中间层服务器上的组件以检索一些表的内容。可以将所有数据包装到Data Set对象中并在单个调用中返回, 而不必每次一个表地重复请求服务器来提取数据。

⑷Data Adapter对象代表了微软数据访问模型的新概念, 虽然可以将ADO中的Command对象看成是它的同类, 但在ADO中没有真正与之等价的对象。在ADO.NET对象模型中, Data Adapter对象可以作为数据库和无连接对象之间的桥梁。

3、两种技术之比较

⑴ADO与ADO.NET的相似之处:

它们都能够编写对数据库服务器中的数据进行访问和操作的应用程序, 并且易于使用、高速度、低内存支出和占用磁盘空间较少, 支持用于建立基于客户端/服务器和Web的应用程序的主要功能。

⑵ADO与ADO.NET的区别:

通过上面的叙述我们知道ADO使用OLE DB接口并基于微软的COM技术, 而ADO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系框架。众所周之.NET体系不同于COM体系, ADO.NET接口也就完全不同于ADO和OLE DB接口, 这也就是说ADO.NET为.NET架构提供了更优化的数据访问模型, 它的主要优点主要体现在以下几个方面:

·数据集的存储方式

ADO采用Record Set存储, 它的数据来源于多个表, 但在缓存中只能集中显示在一张表中, 而ADO.NET采用Data Set存储, 它在缓存中可以是包含一张或多张表的数据库。

·互操作性与可维护性

ADO.NET使用XML格式把数据从数据源传输到本地内存的数据副本中, 因而互操作性更强, 维护更简单。

·对无连接环境的支持

ADO.NET支持离线数据集 (Dis Connect Data Set) 可以利用XML制作数据的一个副本, 除了制作副本的时候要求在线, 其他时候都是离线的。而ADO却是一直与服务器连接着的在线访型访问, 访问代价比较大。

·可编程性与传输性能

ADO.NET使用强类型化数据, 因而使得代码更加简明且易于编写;另外使用强类型化数据可以帮助避免开销很大的数据类型转换, 加快数据传输的性能。

·可伸缩性

ADO.NET编程模型鼓励程序员为运行在Web上的应用程序节省系统资源。因为数据保存在本地内存的缓存中, 因此没有必要为扩展的周期保留数据库锁或维持当前的数据连接。

四、结束语

ADO.NET是一组访问数据源的面向对象的类库。简单的理解, 数据源就是数据库, 它同时也能够是文本文件、Excel表格或者XML文件等。ADO.NET里包含了许多专门用于和数据打交道的对象, 是新型的.NET平台下的数据库访问技术, 它支持工业技术标准, 以整体设计为特色, 而不是以数据库为核心的A-DO模型, ADO.NET集成了ADO对象模型与OLE DB接口, 文中的图1和图2结合起来可以看出这一点。ADO和ADO.NET从本质上来说是两种不同的数据访问技术, 不能混为一谈, 而通过分析我们可以知道掌握ADO.NET技术对于我们具有更深远的意义。

摘要:探讨当前在.NET平台下被广泛使用且容易混淆的数据访问技术ADO与ADO.NET的异同点, 从数据集合的存储方式、互操作性与可维护性、对无连接环境的支持、可编程性与传输性能以及可伸缩性等方面来进行分析比较, 突出ADO.NET的优点。

关键词:ADO,ADO.NET,无连接环境,XML,强类型化数据

参考文献

[1]数据访问技术-ADO.NET程序设计微软公司著2006 (4)

[2]陈志泊ASP.NET数据库应用程序开发教程北京人民邮电出版社2005

ADO.NET的应用 篇8

在大多数实际项目中,应用程序需要和数据库交互,.NET中对数据库的访问是通过ADO.NET来实现的。

2 ADO.NET

ADO.NET是.NET应用程序的数据访问模型,主要为创建分布式应用程序提供数据访问机制。其中的Managed Provider是一个多层次的无连接编程模型,模型的结构如图1所示。

ADO.NET包含两个核心组件:Data Set和.NET Framework数据提供程序。

2.1 Data Set

Data Set是ADO.NET的断开式结构的核心组件。它包含一个或多个Data Table对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关Data Table对象中数据的关系信息组成。Data Set的模型结构如图2所示。

2.2. NET Framework数据提供程序

.NET Framework数据提供程序是ADO.NET结构的另一个核心元素,包含四个核心对象Connection、Command、Data Reader和Data Adapter。用于连接到数据库、执行命令和检索结果,或将其放入Data Set对象,以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起。

Connection对象建立与特定数据源的连接;Command对象用于对数据源执行命令;Data Reader对象从数据源中提供高性能的数据流;Data Adapter提供连接Data Set对象和数据源的桥梁,Data Adapter使用Command对象在数据源中执行SQL命令,以便将数据加载到Data Set中,并使对Data Set中数据的更改与数据源保持一致。

3 常用数据库访问方式

.NET Framework提供了四个.NET Framework数据提供程序,即SQL Server.NET Framework、OLE DB.NET Framework、ODBC.NET Framework和Oracle.NET Framework。

SQL Server.NET Framework使用自身的协议与SQL Server通信,它位于System.Data.Sql Client命名空间中;OLE DB.NET Framework通过COM Interop使用本机OLE DB启用数据访问,它位于System.Data.Ole Db命名空间中;ODBC.NET Framework通过COM Interop使用本机ODBC驱动程序管理器(DM)启用数据访问,通过ADO.NET测试的ODBC驱动程序有:SQL Server、Microsoft ODBC for Oracle、Microsoft Access驱动程序(*.mdb),它位于System.Data.Odbc命名空间中;Oracle.NET Framework通过Oracle客户端连接软件启用对Oracle数据源的数据访问,它位于System.Data.Oracle Client命名空间中,并包含在System.Data.Oracle Client.dll程序集中。

一般根据应用程序的设计和数据源,选择.NET Framework数据提供程序可以提高应用程序的性能、功能和完整性。

4 实现数据的访问

实现数据的访问操作有两种方式,一是与数据库创建连接后,利用Command命令直接对数据操作;二是利用数据适配器(Data Adapter)的Fill或Update等方法对数据操作,该方法是对数据表需要进行复杂操作或长时间交互处理时常用的方法。

下面以SQL Server数据库编程为例介绍数据库编程的一般方法。

ADO.NET访问数据库一般步骤为:

1)创建数据库的连接;

2)请求一个数据集合;

3)将集合放入Data Set中;

4)如果需要,再请求另外的数据集合;

5)关闭数据连接;

6)在进行所需要的操作;

7)需要的话,将Data Set的变化更新到数据库中。

4.1 创建数据库的连接

一般使用Sql Connection对象提供与Microsoft SQL Server的连接,有两种形式的连接字符串。

一是在连接字符串中指定服务器名、用户ID、口令、数据库名。假设SQLServer数据库服务器为127.0.0.1(本机),有效数据库访问用户名为sa,对应密码为1234,数据库名shijuan,则连接字符串可以写为:

string str="server=127.0.0.1;uid=sa;pwd=1234;database=shijuan";

Sql Connection conn=new Sql Connection(str);

二是在连接字符串中指定服务器名、集成安全性(Integrated Security=SSPI)、数据库名等信息。上述连接字符串可以写为:

string str="server=127.0.0.1;Integrated Security=SSPI;database=shijuan";

Sql Connection conn=new Sql Connection(str);

4.2 打开和关闭连接

Open方法使用连接字符串属性中的信息,联系数据源并建立一个打开的连接。

Close方法关闭连接。

如果正在使用Data Adapter,则不必显式打开和关闭连接。当调用这些对象的某个方法时,该方法将检查连接是否已打开。如果没有,适配器将打开连接,执行其逻辑,然后再关闭连接。

4.3 数据访问方法

采用编写代码进行操作的方式通常有两种。

一种是在保持连接的方式下利用Sql Command执行SQL命令,根据程序员所设置的SQL语句的功能自动选择检索(Select Command)、插入(Insert Command)、更新(Update Command)和删除(Delete Command)等命令,从而实现对数据库的各种操作。

二是利用Sql Data Adapter的Fill方法将数据表填充到客户端Data Set数据集中,填充后与SQL服务器的连接就断开了。然后可以在客户端对Data Set中的数据表进行浏览、插入、修改、删除等操作。操作完成后,如果需要更新数据库,再利用Sql Data Adapter的Update方法把Data Set中数据表处理的结果更新到SQLServer数据库中。

在Microsoft Visual Studio.NET 2003的C#环境中,笔者开发研制的自动出卷系统中,设计数据库名称shijuan,其中包含kemu、xuanze、tiankong、fenxi等若干表。例如,在Windows应用程序中,希望显示shijuan数据库中的kemu表,编程如下。

1)首先新建一个Windows应用程序,向窗体拖放一个Data Grid控件。

2)在代码方式下添加名称空间引用。

using System.Data;

using System.Data.Sql Client;

3)创建与shijuan库的连接,并对其操作

5 结束语

Visual Studio.Net中的ADO.NET提供了强大的数据库的访问能力,不仅可以方便的访问本地数据库,而且还可以方便的访问远程数据库,而对程序员来说访问的接口是一致的。掌握了数据库一般访问方法,就可以触类旁通,设计出优秀的基于.Net的数据库应用程序。

参考文献

[1]孙维煜,刘杰,等.C#案例开发[M].北京:中国水利水电出版社,2005.

[2]Fabio Claudio Ferracchiat,Jay Glynn..NET数据服务高级编程[M].北京:清华大学出版社,2002.

ADO.NET的应用 篇9

ADO.NET对象模型中有五个主要的组件, 分别是Connection对象、Command对象、DataAdapter对象、DataSet对象以及DataReader对象。这些组件中负责建立联机和数据操作的部分, 称为数据操作组件 (Managed Providers) , 分别由Connection对象、Command对象、Data Adapter对象以及Data Reader对象所组成。数据操作组件最主要是当作DataSet对象以及数据源之间的桥梁, 负责将数据源中的数据取出后植入DataSet对象中, 以及将数据存回数据源的工作。

1.1 Connection对象

Connection对象是程序和数据库之间的连结桥梁。不将数据库打开是无法从数据库中取得数据的, Connection对象在ADO.NET的最底层。

1.2 Command对象

Command对象主要对数据库进行查询、新增、修改、删除数据等指令, 以及呼叫存在数据库中的预存程序等。这个对象是架构在Connection上, 也就是Command对象是透过连结到数据源的Connection对象来下命令的;所以Connection连结到哪个数据库, Command对象的命令就下到哪里。

1.3 DataAdapter对象

DataAdapter对象主要是在数据源以及DataSet之间执行数据传输的工作, 它可以透过Command对象下达命令后, 并将取得的数据放入DataSet对象中。这个对象是架构在Command对象上, 并提供了许多配合DataSet使用的功能。

1.4 DataSet对象

Data Set这个对象被视为一个Cache区域, 可以把从数据库中所查询到的数据保留起来, 甚至可以将整个数据库显示出来。DataSet的能力可以储存多个Table, 还可以透过DataAdapter对象取得一些例如主键等的数据表结构, 并可以记录数据表间的关联。

DataSet对象可以说是ADO.NET中重量级的对象, 这个对象架构在DataAdapter对象上, 本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet对象以及数据源间传输数据的桥梁。

1.5 DataReader对象

只需要循序的读取数据而不需要其它操作时, 可以使用DataReader对象。DataReader对象只是一次一条记录地向下循序地读取数据源中的数据, 不作其它的操作。因为DataReader在读取数据的时候限制了每次只读取一条记录, 而且只能只读, 所以使用起来不但节省资源而且效率很高。

1.6 上述五对象之间的相互关系

ADO.NET则分为两种, 一种是直接存取MS SQL Server中的数据, 另一种是透过OLEDB来存取其它数据库中的数据。前面我们提过:要存取数据源中的数据, 要通过数据操控组件。这个数据操作组件就是Connection对象、Command对象、DataAdapter对象以及DataReader对象。由于我们可以选择透过OLEDB和资料源联机, 或是和MS SQL Server直接联机;所以ASP.NET提供了两组数据操作组件, 分别为ADO数据操作组件以及SQL数据操作组件。

每组数据操作组件内都有Connection对象、Command对象、DataAdapter对象及DataReader对象。这两种数据操作组件虽然针对的数据源不一样, 但是这些对象的架构都一样。例如ADOCo nnection和SQLConnection对象虽然一个是针对OLEDB, 而另一个是针对MS SQL Server, 但是这两个对象都有一样的属性、事件及方法, 所以使用起来并不会造成困扰;只要针对所要建立的数据源种类来选择ADO数据操作组件, 或是SQL数据操作组件就可以了。虽然我们也可以透过OLEDB来存取MS SQL Server中的资料, 但是透过SQL类别对象来存取MS SQL Server中的数据效率最好;这是因为SQL类别不经过OLEDB这一层, 而是直接作用MS SQL Server中的API, 所以效率比较好。ADO.NET对于这两种数据存取方式所使用的对象完全不一样, 在使用的时候必须要特别注意。

2、ADO.NET中各对象的使用

2.1 数据两种操作数据库的方式

ADO.NET中二种连接方式无连接的方式及保持连接的方式。不论采用哪种方式, 都可以通过SqlCommand对象提供的方法传递对数据库操作的命令, 并返回命令执行的结果。在保持连接的方式下操作数据库的一般步骤为:

(1) 创建SqlConnection的实例;

(2) 创建SqlCommand的实例;

(3) 打开连接;

(4) 执行命令;

(5) 关闭连接。

2.2 sqldataadapter对象使用

2.2.1 SqlDataAdapter特性

SqlDataAdapter类用作ADO.NET对象模型中和数据连接部分和未连接部分之间的桥梁。SqlDataAdapter从数据库中获取数据, 并将其存储在DataSet中。SqlDataAdapter也可能取得DataSet中的更新, 并将它们提交给数据库。

SqlDataAdapter是为处理脱机数据而设计的, 调用其Fill方法填充DataSet时甚至不需要与数据库的活动连接。即如果调用Fill方法时, S q l D a t a A d a p t e r与数据库的连接不是打开时, SqlDataAdapter将打开数据库连接, 查询数据库, 提取查询结果, 将查询结果填入DataSet, 然后关闭也数据库的连接。

2.2.2 SqlDataAdapter的设置

S q l D a t a A d a p t e r将查询结果存储到D a t a S e t中时, SqlDataAdapter使用SqlCommand和SqlConnection与数据库进行通信。SqlDataAdapter在内部使用SqlDataReader获取结果, 并将信息存储到DataSet的新行。SqlCommand类的属性包括SelectCo mmand、InsertCommand、UpdateCommand、DeleteCommand分别对应数据库的查询、插入、更新和删除操作。

2.2.3 创建SqlDataAdapter

创建SqlDataAdaper对象可以调用其构造函数, 来实现, 如下。

strSql是查询数符串;strConn是数据库连接字符串;cmd是SqlCommand对象;cn是SqlConnection对象。

2.2.4 获取查询中的结果

使用Fill方法

调用SqlDataAdapter类的Fill方法会执行存储在SqlDataA dapter对象的SqlCommand属性中的查询, 并将查询结果存储在DataSet中。示例代码如下:

da.Fill (ds) ;

执行以上代码后, DataSet的实例对象ds中会创建一个新的Data Table, 这个DataTable拥有strSql查询语句中所包括的字段, 但Data Table对象的名称为默认的Table, 而不是查询语句中所查询的表的名称。

使用重载的Fill方法

指定DataTable

da.Fill (DataSet, ”MyTableName”) //SqlDataAdapter填充指定DataSet的特定表。

da.Fill (DataTable) ;//SqlDataAdapter填充已经创建的DataTable对象。

2.2.5 将查询结果映射到DataSet

TableMappings映射

TabbleMappings集合控制SqlDataAdapter如何将DataSet映射到数据库。如果保持TabbleMappings集合为空, 调用Fill方法, 然后将DataSet作为参数, 而不指定表名, SqlDataAdapter将假定您希望使用一个名为“Table”的DataTable来装载数据。

此语句的作用是将DataSet中原来名字为“Table”的DataTable命名为“Employees”, DataSet填充数据时, 按查询结果集的顺序依次填充DataSet中的Table、Table1、Table2……, 所以给DataTable命名时需留意该DataTable是否为当前将要使用的对象。

2.3 SqlCommand对象使用

SqlCommand对象允许你指定在数据库上执行的操作的类型。比如, 你能够对数据库中的行数据执行select, insert, modify以及delete命令。SqlCommand对象能被用来支持断开连接数据管理的情况, 但是在这节课我们将只单独使用SqlCommand对象。后面关于SqlDataAdapter的课程将解释如何使用断开数据实现应用程序。这节课将同时展示如何从数据库中返回一个单独的值, 比如表中记录的数量。

2.3.1 创建SqlCommand对象

上面一行是典型的实例化SqlCommand对象的代码。它使用一个string参数来保存你想要执行的命令以及一个关于SqlConn ection对象的引用。SqlCommand具有重载形式, 这些形式你将在以后的示例中看到。

2.3.2 查询数据

当使用SQL的select命令, 会得到一组数据集。为了和SqlCom mand对象配合使用, 你应该使用ExecuteReader方法, 它返回一个SqlDataReader对象。我们将在后面的内容讨论SqlDataReader。下面的例子显示了如何使用SqlCommand对象来得到SqlDataReader对象:

在上面的示例中, 我们通过传递命令字符串核连接对象到构造函数的方式实体化了S q l C o m m a n d对象。然后我们通过S q l C o m m an d对象c m d调用E x e c u t e R e a d e r方法得到了SqlDataReader对象。

2.3.3 插入数据

要对数据库插入数据, 使用SqlCommand对象的ExecuteNon Query方法。下面的代码显示了如何向数据库表插入数据:

SqlCommand的实例化过程与以前看到的有一些区别, 但是基本一致。在构造函数的第一个字符串参数中是用的是插入字符串变量而不三字符串字面值。该变量在SqlCommand声明之前被声明了。

2.3.4 更新数据

ExecuteNonQuery方法同样用来更新数据。下面的代码显示了如何更新数据:

2.3.5 删除数据

同样能够使用ExecuteNonQuery方法删除数据。下面的例子说明了如何使用ExecuteNonQuery方法删除数据库中的记录。

这个示例使用了没有参数的Sql Command构造函数。取而代之的是显式地设置了CommandText和SqlCommand对象的连接属性。

3、结语

在ADO.NET中有五种基本的对象:Connection对象、Command对象、DataAdpter对象、DataReader对象及DataSet对象, 在这五个对象中DataSet完全存在于客户机的Cach中, 而其它Command对象、DataAdpter对象、DataReader对象三个对象必须建立在Connection对象基础之上。Connection对象是与数据库建立连接。Command对象允许查寻并对数据库传送命令。它含有针对不同的命令而特定的方法。ExecuteReader方法返回DataReader对象来现实查询的结果。对于insert, update以及delete这些SQL命令, 使用E xe c ut e No n Qu e ry方法。如果你只需要查询的单独聚集值, Execute Scalar方法是最好的方法, 因为其占用资源少, 速度特别快。

摘要:本文主要介绍ADO.NET中的对象及对象之间的逻辑关系;通过本文的深入学习, 了解ADO.NET作开发时先后顺序及相互的关系, 达到熟练的掌握如何应用ADO.NET对象进行数据记录的操作;在实际工作中, 这里所介绍的知识可以起到一个抛砖引玉的作用。

上一篇:激光束质量控制下一篇:国内港口物流发展问题