· 第一课: ADO.NET介绍
本节将介绍ADO.NET的一些基本概念,您将在后面章节进一步了解它们。通过本节,您将了解ADO.NET,并且理解data provider,connection对象、command对象、DataReader对象、DataSet对象以及DataAdapter对象。对于没有经验的开发者开说,也许本课某些概念比较抽象,没有关系,我们将会在后续课程中详细展开。
介绍
ADO.NET是一组访问数据源的面向对象的类库。简单的理解,数据源就是数据库,它同时也能够是文本文件、Excel表格或者XML文件。本教程将以SQL Server 2000 / 2005为示例数据库服务器,Northwind为示例数据库。
Data Providers
我们需要与不同类型的数据源或者数据库交互。然而,并没有这样的一组类库可以达到这个目的,因为各个数据源的协议各不相同,我们需要通过正确的协议来访问数据源。有些比较老的数据源用ODBC协议,其后的一些数据源用OleDb协议,现在,仍然还有许多新的数据源在不断出现。使用ADO.NET类库,你可以直接访问所有的数据源。
ADO.NET提供了访问数据源的公共方法,对于不同的数据源,它采用不同的类库。这些类库称为Data Providers,并且通常是以数据源的类型以及协议来命名的。表1列出了常见的一些data providers,以及它们所使用的API前缀和交互的数据源类型。
表1. ADO.NET Data Providers是一组提供访问指定数据源的基本类库。API的开头字符表明了他们支持的协议。
Provider | API 前缀 | 数据源描述 |
ODBC Data Provider | Odbc | 提供ODBC接口的数据源。一般是比较老的数据库。 |
OleDb Data Provider | OleDb | 提供OleDb接口的数据源,比如Access或Excel。 |
Oracle Data Provider | Oracle | Oracle数据库 |
SQL Data Provider | Sql | Microsoft SQL Server数据库 |
Borland Data Provider | Bdp | 通用的访问方式能访问许多数据库,比如Interbase、SQL Server、IBM DB2和Oracle。 |
我们举一个实际的例子来理解表格中的API前缀。在这里你将学习到的第一个ADO.NET对象是连接对象(connection object),顾名思义,你可以通过它建立与数据源的连接。如果我们使用OleDb Data Provider连接一个提供OleDb接口的数据源,那么我们将使用连接对象就是OleDbConnection。同理,如果连接Odbc数据源或者SQL Server数据源就分别加上Odbc或者Sql前缀,即OdbcConnection或SqlConnection。在本教程里使用的是数据源是SQL Server,所以你会发现所有的API对象都带有Sql前缀,比如SqlConnection。
ADO.NET对象
ADO.NET里包括了许多专门用于和数据打交道的对象。这一节介绍了一些最常用的对象。这些对象是学习ADO.NET必须了解的。掌握它们后你将了解使用ADO.NET和数据打交道会需要考虑哪些事情。
The SqlConnection Object
要访问一个数据源,你必须先建立一个到它的连接。这个连接里描述了数据库服务器类型、数据库名字、用户名、密码,和连接数据库所需要的其它参数。command对象通过使用connection对象来知道是在哪个数据库上面执行SQL命令。
The SqlCommand Object
连接数据库后就可以开始想要执行的数据库操作,这个是通过command对象完成,command对象一般被用来发送SQL语句给数据库。command对象通过connection对象得知道应该与哪个数据库进行连接。我们既可以用command对象来直接执行SQL命令,也可以将一个command对象的引用传递给SqlDataAdapter,SqlDataAdapter能包含一系列的command对象,可以处理大量数据,请见下面描述。
The SqlDataReader Object
根据经验,许多数据库操作要求我们仅仅只是需要读取一组数据。这时候就用到了data reader对象。通过data reader对象,我们可以获得从command对象的SELECT语句得到的结果。考虑到性能方面的因素,data reader返回的数据流被设计为只读的、单向的,这将意味着你只能按照一定的顺序从数据流中取出数据。虽然你在这里也获得了性能上的提升,但是缺点也是明显的,不能够操作取回数据,如果需要操作编辑数据,解决的办法是使用DataSet。
The DataSet Object
DataSet对象用于表示那些储存在内存中的数据。它包括多个DataTable对象,DataTable就象一个普通的数据库中的表一样,也有行和列,我们甚至能够通过定义表和表之间的关系来创建从属关系。DataSet主要用于管理存储在内存中的数据以及对数据的断开操作。注意,由于DataSet对象能被所有Data Providers使用,它不需要指定前缀。
The SqlDataAdapter Object
某些时候我们只需要读数据,并且你不需要修改它们把更改写回数据源。但是还有这样一些情况为了减少数据库调用的次数,我们把数据缓存在内存中。Data adapter通过断开模型来轻松的实现了后面这种情况的处理。当批量完成的对数据库的读写操作的并将改变写回数据库的时候,data adapter 会填充(fill)DataSet对象。data adapter里包含了connection对象,当对数据源进行读取或者写入的时候,data adapter会自动的打开或者关闭连接。此外,data adapter还包含对数据的SELECT,INSERT,UPDATE和DELETE操作的command对象引用。如果我们为DataSet中的每一个table都指定data adapter,它将会帮你处理好所有与连接处理数据库的操作,我们所需要做的仅仅就是告诉data adapter什么时候读取或者写入到数据库。
总结
ADO.NET是用于和数据源打交道的.NET技术。它包含了许多的Data Providers,分别用于访问不同的数据源――取决于它们所使用的数据库或者协议。然而无论使用什么样的Data Provider,与数据源进行交互的的对象的使用方法都是相似的。SqlConnection对象用于管理与数据源的连接。SqlCommand对象可以向数据源发送SQL命令。SqlDataReader可以快速的从数据源获得只读的,向前的数据流。使用DataSet可以处理那些已经断开的数据(储存在内存中的),并通过SqlDataAdapter实现数据源的读取和写入。
这仅仅只是本系列ADO.NET指南中的开始。对于没有经验的开发者开说,也许本课某些概念比较抽象,没有关系,我们将会在后续课程中详细展开。我们将在下一课里深入学习