代码之家  ›  专栏  ›  技术社区  ›  Gustavo Rubio

在企业库中运行时更改连接字符串

  •  8
  • Gustavo Rubio  · 技术社区  · 17 年前

    是否有方法在运行时更改企业库中数据库对象的连接字符串?我找到了 this 链接,但有点过时(2005年)

    this 但它似乎一般适用于.Net,我想知道是否有什么东西可以专门为EntLib做。

    我只是将连接字符串名称传递给DatabaseFactory对象中的CreateDatabase()方法,直到昨天我的项目经理要求我支持多个数据库实例时,这种方法才起作用。碰巧我们每个州必须有一个数据库(一个用于CA,一个用于FL,等等),所以我的软件需要在所有数据库中循环并处理数据,但它将使用相同的配置文件。

    提前谢谢。

    4 回复  |  直到 9 年前
        1
  •  14
  •   Community Mohan Dere    9 年前

    看看这个: Open Microsoft.practices.EnterpriseLibrary database with just a connection string

    只要使用下面的代码,就可以在运行时创建数据库

    database mydb = new EnterpriseLibrary.Data.Sql.SqlDatabase("connection string here");
    

    我有一个单一的web应用程序使用多个数据库,根据url中的不同子域连接到不同的数据库。 例如:

    • abc.test.com----->使用Db_项目ABC
    • def.test.com------>使用db_ProjectDEF

    我使用url重写来解析子域名,并使用子域名来选择存储在主数据库中的数据库连接字符串。

    谢谢

        2
  •  3
  •   Martin Brown    17 年前

    如果你看看“ Enterprise Library Docs - Adding Application Code 上面说:

    “如果您知道的是 要创建的数据库 可以绕过应用程序的 构造函数直接创建 数据库对象。因为数据库 必须构造其派生的 确定ADO.NET数据提供程序。 使用SqlClientFactory提供程序, SqlCeDatabase类使用 SqlCeProviderFactory提供程序,以及 OracleDatabase类使用 OracleClientFactory提供程序。它是 连接字符串。”

    然后给出一些例子。这表明您不应该使用DatabaseFactory,而应该为每个不同的连接创建一个新的数据库类。

        3
  •  3
  •   kleopatra Aji kattacherry    12 年前

    我们可以使用以下代码片段连接到多个数据库。

    1. Microsoft.Practices.EnterpriseLibrary.Data.dll

    片段:

    var builder = new ConfigurationSourceBuilder();
    
            builder.ConfigureData()
                   .ForDatabaseNamed("LocalSqlServer1")
                     .ThatIs.ASqlDatabase()
                     .WithConnectionString(@"Data Source=PCNAME\SQLEXPRESS;Initial Catalog=ContactDB;Integrated Security=True")
                   .ForDatabaseNamed("LocalSqlServer2")
                     .ThatIs.ASqlDatabase()
                     .WithConnectionString(@"Data Source=PCNAME\SQLEXPRESS;Initial Catalog=MyDB;Integrated Security=True");
    
            var configSource = new DictionaryConfigurationSource();
            builder.UpdateConfigurationWithReplace(configSource);
    
    Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);      
    
    Database destinationDatabase = DatabaseFactory.CreateDatabase("LocalSqlServer2");      
    
        4
  •  2
  •   Junior Mayhé    16 年前

    using Microsoft.Practices.EnterpriseLibrary.Data;
    using Microsoft.Practices.EnterpriseLibrary.Configuration;
    using Microsoft.Practices.EnterpriseLibrary.Data.Configuration;
    
    DatabaseSettings settings = new DatabaseSettings();
    
    // This maps to <databaseType> element in data config file
    DatabaseTypeData type = new DatabaseTypeData("Sql Server", "Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabase, Microsoft.Practices.EnterpriseLibrary.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
    settings.DatabaseTypes.Add(type);
    
    // This maps to <connectionString> element in data config file
    ConnectionStringData connectionString = new ConnectionStringData("localhost.EntLibQuickStarts");
    
    // Followings map to <parameter> elements in data config file
    ParameterData param = new ParameterData("server", "localhost");
    connectionString.Parameters.Add(param);
    
    param = new ParameterData("database", "EntLibQuickStarts");
    connectionString.Parameters.Add(param);
    
    param = new ParameterData("integrated security", "true");
    connectionString.Parameters.Add(param);
    
    settings.ConnectionStrings.Add(connectionString);
    
    // Too bad compiler gets confused InstanceData with System.Diagnostics.InstanceData.  It maps to <instance> element in data config file
    Microsoft.Practices.EnterpriseLibrary.Data.Configuration.InstanceData instance = new    Microsoft.Practices.EnterpriseLibrary.Data.Configuration.InstanceData("localhost", "Sql Server", "localhost.EntLibQuickStarts");
    settings.Instances.Add(instance);
    
    ConfigurationDictionary configurations = new ConfigurationDictionary();
    
    // This is how to tie DatabaseSettings with ConfigurationDictionary. It maps to <configurationSection name="dataConfiguration"> element in App.config file    configurations.Add("dataConfiguration", settings);
    ConfigurationContext context = ConfigurationManager.CreateContext(configurations);
    
    Database database = new DatabaseProviderFactory(context).CreateDatabase("localhost");
    
    推荐文章