ADO.NET 2.0 功能一览

ADO.NET 2.0随附了大量的新功能,这包括一个新的基于基类的提供程序模型、所有
提供程序都可以利用的功能以及特定于System.Data.SqlClient的更改。因为.NET Fram
ework 2.0是与SQL Server 2005一起发布的,所以其中的一些功能要求在SQL Server 2
005种也可用。本文旨在充当新功能的概述和路线图,提供它们的用法示例,并且包含了
一个说明哪些功能不特定于提供程序和哪些功能特定于SqlClient的图表。

基于基类的提供程序模型

在ADO.NET 1.0和1.1中,提供程序编写器实现了一系列特定于提供程序的类。基于
每个类都实现了一个通用接口的事实,所以,可以利用通用编码。例如,System.Data.
SqlClient包含类SqlConnection,并且该类实现了IDbConnection。System.Data.Oracl
eClient包含类OracleConnection,后者也实现了IDbConnection。特定于提供程序的类
可以实现特定于数据源的属性和方法,例如,SqlConnection可以实现Database属性和C
hangeDatabase方法。但OracleConnection不是这样,因为Oracle数据库不具有每个数据
库实例拥有多个“数据库”(它们在ANSI SQL中称为编录)的概念。ADO.NET 2.0中的新
提供程序模型基于System.Data.Common中的一系列基类。这些基类提供了常见功能的基
本实现,当然,其中的每个基类还实现了仍然需要的通用接口,以便向后兼容。提供程
序编写器可以选择使用基类或者支持接口。以前版本中的接口模型有两个特例:DataAd
apter/DbDataAdapter和CommandBuilder。CommandBuilder类为一个简单的SELECT命令提
供了对使用相同列集的INSERT、UPDATE和DELETE命令的自动实现。在保持CommandBuild
er用于创建操作语句的基本算法的同时对其进行扩展是不可能的,因为SqlCommandBuil
der是一个密封类。尽管仍然无法重用SqlCommandBuilder参数分析程序,但是System.D
ata.Common中有一个DbCommandBuilder基类。在这些类的基类级别也公开了新功能,Da
taAdapter/DbDataAdapter基类公开了用于将特定于提供程序的类型(如SQL Server Sq
lTypes)推到数据集(ReturnProviderSpecificTypes属性)中以及进行批更新(State
mentType.Batch枚举值和UpdateBatchSize属性)的机制。DbCommandBuilder公共基类包
含了一个用于指示并发策略选择的属性(ConflictDetection属性)。

提供程序工厂

ADO.NET 1.0和1.1中基于接口的方法的复杂性之一在于:您无法在接口上调用构造
函数,您必须创建特定类的具体实例。以前的API(如OLE DB和ADO)通过重载连接字符
串来解决这一问题。连接字符串包含提供程序的COM PROGID,而正确的DataSource类是
基于该PROGID创建的。因为OLE DB DataSource PROGID存储在注册表中,所以这是可能
的。

' VB6 ADO code, Connection is an interface (actually it's _Connection)

Dim conn as Connection

' note that the default provider is MSDASQL, the OLE DB provider for ODBC

' this uses the OLE DB provider for SQL Server

conn.ConnectionString = "provider=sqloledb;.." ' other parameters deleted

conn.Open

ADO.NET 2.0具有与此对应的解决方案。每个数据提供程序都在.NET machine.conf
ig中注册了一个ProviderFactory类和一个提供程序字符串。有一个ProviderFactory基
类(DbProviderFactory)和一个System.Data.Common.ProviderFactories类,可以返回有
关machine.config中注册的不同数据提供程序信息的DataTable,而且还可以在给定该D
ataTable中的提供程序字符串(称为ProviderInvariantName)或DataRow的情况下检索
正确的ProviderFactory。以前通常按如下方式编写条件代码:

enum provider {sqlserver, oracle, oledb, odbc};

// determine provider from configuration

provider prov = GetProviderFromConfigFile();

IDbConnection conn = null;

switch (prov) {

case provider.sqlserver:

conn = new SqlConnection();

break;

case provider.oracle:

conn = new OracleConnection();

break;

case provider.oledb:

conn = new OleDbConnection();

break;

case provider.odbc:

conn = new OdbcConnection();

break;

// add new providers as the application supports them

}

现在可以按如下方式编写:

// get ProviderInvariantString from configuration

string provstring = GetProviderInvariantString();

DbProviderFactory fact = DbProviderFactories.GetFactory(provstring);

IDbConnection = fact.CreateConnection(); 

 

你可能感兴趣的:(ADO.NET 2.0 功能一览)