加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ado.net – ASP.NET:如何从web.config ConnectionString创建一

发布时间:2020-12-15 19:03:43 所属栏目:asp.Net 来源:网络整理
导读:如何根据提供者名称构建DbConnection? 示例提供商名称 System.Data.SqlClient System.Data.OleDb System.Data.Odbc FirebirdSql.Data.FirebirdClient 我有连接字符串存储在我的IIS服务器的web.config文件中: connectionStrings add name="development" con
如何根据提供者名称构建DbConnection?

示例提供商名称

> System.Data.SqlClient
> System.Data.OleDb
> System.Data.Odbc
> FirebirdSql.Data.FirebirdClient

我有连接字符串存储在我的IIS服务器的web.config文件中:

<connectionStrings>
  <add name="development"
        connectionString="Provider = IBMDA400; Data Source = MY_SYSTEM_NAME; User Id = myUsername; Password = myPassword;" 
        providerName="System.Data.OleDb" />
  <add name="live" 
        connectionString="usd=sa;pwd=password;server=deathstar;" 
        providerName="System.Data.Odbc" />
  <add name="testing" 
        connectionString="usd=sa;pwd=password;server=deathstar;" 
        providerName="System.Data.SqlClient" />
  <add name="offline"
        connectionString="Server=localhost;User=SYSDBA;Password=masterkey;Charser=NONE;Database=c:datamydb.fdb"
        providerName="FirebirdSql.Data.FirebirdClient"/>

你可以看到他们都使用不同的提供者.当我来创建一个连接的时候,我必须知道要创建什么样的DbConnection,例如:

> SqlConnection
> OleDbConnection
> OdbcConnection
> FbConnection

connectionStrings条目包含一个providerName,但这些不是DbConnection后代类的名称,而是一个命名空间

我如何根据字符串providerName构建一个DbConnection?

public DbConnection GetConnection(String connectionName)
{
    //Get the connectionString infomation
    ConnectionStringSettings cs = 
          ConfigurationManager.ConnectionStrings[connectionName];
    if (cs == null)
       throw new ConfigurationException("Invalid connection name ""+connectionName+"");

    //Create a connection based on the provider
    DbConnection conn = new DbConnection();

}

解决方法

如果你走这条路线,我想你会想要使用DbProviderFactories类获得一个可以用来构建连接的DbProviderFactory.我没有尝试过这个代码,但我认为它会奏效.您可能需要使用DbProviderFactories类上的GetFactoryClasses方法查找提供程序名称,并使用InvariantName.
public DbConnection GetConnection(String connectionName)
{
   //Get the connection string info from web.config
   ConnectionStringSettings cs= 
         ConfigurationManager.ConnectionStrings[connectionName];

   //documented to return null if it couldn't be found
   if (cs == null)
      throw new ConfigurationErrorsException("Invalid connection name ""+connectionName+""");

   //Get the factory for the given provider (e.g. "System.Data.SqlClient")
   DbProviderFactory factory = 
         DbProviderFactories.GetFactory(cs.ProviderName);

   //Undefined behaviour if GetFactory couldn't find a provider.
   //Defensive test for null factory anyway
   if (factory == null)
      throw new Exception("Could not obtain factory for provider ""+cs.ProviderName+""");

   //Have the factory give us the right connection object      
   DbConnection conn = factory.CreateConnection();

   //Undefined behaviour if CreateConnection failed
   //Defensive test for null connection anyway
   if (conn == null)
      throw new Exception("Could not obtain connection from factory");

   //Knowing the connection string,open the connection
   conn.ConnectionString = cs.ConnectionString;
   conn.Open()

   return conn;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读