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  
 2    
 3     "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   
11 

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

系统配置路径:

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

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

1     
2       "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       "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       "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       "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       "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       "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       "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     

 

转载于:https://www.cnblogs.com/DreamOfLife/p/9100619.html

你可能感兴趣的:(C#基础知识回顾:2.使用DbProviderFactory实现多数据库访问)