C#基础知识回顾:2.使用DbProviderFactory实现多数据库访问

  ADO.Net 2.0中,在System.Data.Common中引入了一系列抽象基类,使得开发人员能够在不依赖具体数据库操作的情况下进行编写数据访问代码,它们分别是DbConnection、DbCommand和DBDataAdapter,同时,.Net Framework也提供这些基类的实现类,用来处理具体的数据库操作,比如

  • MSSQLserver对应的实现类:System.Data.SqlClient.SqlConnection、System.Data.SqlClient.SqlCommand、System.Data.SqlClient.SqlDataAdapter。
  • Oracle对应的实现类:System.Data.OracleClient.OracleConnection、System.Data.OracleClient.OracleCommand、System.Data.OracleClient.OracleDataAdapter。

  要使用这些抽象基类来实现数据库操作,主要依赖于DbProviderFactories类,它是数据库操作的工厂类,根据传递的DataProviderName返回具体的数据库操作实现DbProviderFactory,它包括一系列方法用于访问数据库,获取的数据是DataTable的形式。

  比如,MSSQLserver对应的实现类:System.Data.SqlClient.SqlClientFactory,Oracle对应的实现类:System.Data.OracleClient.OracleClientFactory。

  使用数据库对应的实现类,就可以调用其方法访问到数据,其中获取到的数据都是以DataTable的形式。

使用此方式进行数据库,还需要在配置文件中进行以下调整:

1.ConnnectionString

ConnectionStringSettings包括三个属性:ConnectionString、Name、ProviderName。这三个属性都需要进行配置,代码中需要根据ProviderName获取到具体的数据库操作实现类:

public static System.Data.Common.DbProviderFactory GetFactory (string providerInvariantName);

2.system.Data下添加DbProviderFactories配置节

 1 <system.data> 
 2   <DbProviderFactories> 
 3     <add name="SqlClient Data Provider" 
 4      invariant="System.Data.SqlClient"  
 5      description=".Net Framework Data Provider for SqlServer"  
 6      type="System.Data.SqlClient.SqlClientFactory, System.Data,  
 7      Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
 8 
 9     /> 
10   </DbProviderFactories>
11 </system.data>

为了保证不与系统的配置发生冲突,建议在DbProviderFactories配置节的顶部添加以下配置

<remove invariant=" System.Data.SqlClient "/>。

系统配置路径:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

其他数据库的配置信息如下:

1     <DbProviderFactories>
2       <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"/>
3       <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"/>
4       <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"/>
5       <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"/>
6       <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.111.6.20, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
7       <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.58.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/>
8       <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Framework Data Provider for PostgreSQL Database" type="Npgsql.NpgsqlFactory, Npgsql, Version=1.98.4.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>
9     </DbProviderFactories>

 

posted @ 2018-05-28 16:01  不一样的程序人生  阅读(1135)  评论(0编辑  收藏  举报