Providesfactories类的应用(转)
感觉很实用:只不过微软也有直接工的东西可以完成
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.config中注册了一个ProvidesFactory类和一个提供程序字符串。有一个ProvidesFactory基类(DbProvidesFactory)和一个System.Data.Common.ProvidesFactories类,可以返回有关machine.config中注册的不同数据提供程序信息的DataTable,而且还可以在给定该DataTable中的提供程序字符串(称为ProviderInvariantName)或DataRow的情况下检索正确的ProvidesFactory。以前通常按如下方式编写条件代码:
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();
DbProvidesFactory fact = DbProvidesFactories.GetFactory(provstring);
IDbConnection = fact.CreateConnection();
由于出现了用于检索安装在计算机上的数据提供程序以及为每个数据提供程序检索Provide***ctory的标准,因此带来了其他一些有趣的可能性。
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.config中注册了一个ProvidesFactory类和一个提供程序字符串。有一个ProvidesFactory基类(DbProvidesFactory)和一个System.Data.Common.ProvidesFactories类,可以返回有关machine.config中注册的不同数据提供程序信息的DataTable,而且还可以在给定该DataTable中的提供程序字符串(称为ProviderInvariantName)或DataRow的情况下检索正确的ProvidesFactory。以前通常按如下方式编写条件代码:
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();
DbProvidesFactory fact = DbProvidesFactories.GetFactory(provstring);
IDbConnection = fact.CreateConnection();
由于出现了用于检索安装在计算机上的数据提供程序以及为每个数据提供程序检索Provide***ctory的标准,因此带来了其他一些有趣的可能性。