Kyle Tsuei

导航

ADO.NET枚举数据提供者

简介

ADO.NET 2.0引入了基于工厂方法设计模式的公共模型概念,它使用简单的应用程序编程接口(API)通过不同的数据提供者进行数据库访问。数据提供者工厂让你不需要在代码中限定使用指定的数据提供者。工厂方法类创建并返回强类型、由请求信息指定的提供者。这让你可以编写不依赖于数据提供者的代码,并且可以在运行时选择数据提供者。使用公共模型,编写的代码很容易支持多个数据库。

数据提供者枚举

使用DbProviderFactories类可以查询安装于本地机器的.NET数据提供者。静态方法GetFactoryClasses()会通过DataTable类型返回实现了DbProviderFactory基类的所有继承类的信息。

1- GetFactoryClasses()方法返回结果的DataTable表定义

列名

说明

Name

数据提供者名称

Description

数据提供者说明

InvariantName

machine.config文件的<system.data>中的<DbProviderFactories>中注册的数据提供者元素唯一标识符。例如,SQL Server数据提供者的唯一标识为”System.Data.SqlClient”。此标识用来编程引用数据提供者。

AssemblyQualifiedNAme

数据提供者的完整名,实例化对象的所有信息(反射)。

 

以下代码用来实现对本地支持的数据提供者的枚举:

using System;
    
using System.Data;
    
using System.Data.Common;

    
class Program
    {
        
static void Main(string[] args)
        {
            DataTable dt 
= DbProviderFactories.GetFactoryClasses();
            
foreach (DataRow row in dt.Rows)
            {
                Console.WriteLine(
"{0}\n\r  {1}\n\r  {2}\n\r  {3}\n\r",
                    row[
"Name"], row["Description"], row["InvariantName"],
                    row[
"AssemblyQualifiedName"]);
            }

            Console.WriteLine(
"Press any key to continue.");
            Console.ReadKey();
        }
    }


通过以上代码结果获得的所有关于数据提供者的信息都记录在本地
machine.config中,代码如下:

<system.data>
      
<DbProviderFactories>
        
<add name="Odbc Data Provider" invariant="System.Data.Odbc"
          description
=".Net Framework Data Provider for Odbc"
          type
="System.Data.Odbc.OdbcFactory,
          System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

        
/>
        
<add name="OleDb Data Provider" invariant="System.Data.OleDb"
          description
=".Net Framework Data Provider for OleDb"
          type
="System.Data.OleDb.OleDbFactory,
          System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

        
/>
        
<add name="OracleClient Data Provider" invariant="System.Data.OracleClient"
          description
=".Net Framework Data Provider for Oracle"
          type
="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient,
          Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
 />
        
<add name="SqlClient Data Provider" invariant="System.Data.SqlClient"
          description
=".Net Framework Data Provider for SqlServer"
          type
="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0,
          Culture=neutral, PublicKeyToken=b77a5c561934e089"
 />
        
<add name="Microsoft SQL Server Compact Data Provider"
          invariant
="System.Data.SqlServerCe.3.5"
          description
=".NET Framework Data Provider for Microsoft SQL Server Compact"
          type
="System.Data.SqlServerCe.SqlCeProviderFactory,
          System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral,
          PublicKeyToken=89845dcd8080cc91"
 />
       
</DbProviderFactories>
     
</system.data>

 

我们可以通过数据库提供者枚举动态地添加各种不同类型数据库连接并进行数据库操作,或者通过配置文件指定不同的数据库连接无代码实现多种数据库的连接和访问。这对于数据库客户端应用程序和有多种数据源的Web和Windows Form应用程序都简化了繁杂的编码工作。稍后会讨论通过配置实现多种数据库连接的方法。

posted on 2009-03-17 09:01  Kyle Tsuei  阅读(586)  评论(0)    收藏  举报