C# 在企业库中运行时更改连接字符串
是否有方法在运行时更改企业库中数据库对象的连接字符串?我找到了链接,但它有点过时(2005年) 我也发现了,但它似乎适用于.Net,我想知道是否有什么东西可以专门为EntLib做 我只是将连接字符串名称传递给DatabaseFactory对象中的CreateDatabase()方法,直到昨天我的项目经理要求我支持多个数据库实例时,这种方法才起作用。碰巧我们每个州必须有一个数据库(一个用于CA,一个用于FL,等等),所以我的软件需要在所有数据库中循环并处理数据,但它将使用相同的配置文件 提前感谢。如果您查看“” 上面说: “如果您知道的是 要创建的数据库 可以绕过应用程序的 配置信息并使用 构造函数直接创建 数据库对象。因为数据库 类是一个抽象基类,您可以 必须构造其派生的 派生数据库类型 确定ADO.NET数据提供程序。 例如,SqlDatabase类 使用SqlClientFactory提供程序, SqlCeDatabase类使用 SqlCeProviderFactory提供程序,以及 OracleDatabase类使用 OracleClientFactory提供程序。它是 你的责任是建造 数据库类的适当类型 连接字符串。”C# 在企业库中运行时更改连接字符串,c#,.net,database,configuration,enterprise-library,C#,.net,Database,Configuration,Enterprise Library,是否有方法在运行时更改企业库中数据库对象的连接字符串?我找到了链接,但它有点过时(2005年) 我也发现了,但它似乎适用于.Net,我想知道是否有什么东西可以专门为EntLib做 我只是将连接字符串名称传递给DatabaseFactory对象中的CreateDatabase()方法,直到昨天我的项目经理要求我支持多个数据库实例时,这种方法才起作用。碰巧我们每个州必须有一个数据库(一个用于CA,一个用于FL,等等),所以我的软件需要在所有数据库中循环并处理数据,但它将使用相同的配置文件 提前感谢。
然后给出一些例子。这表明您不应该使用DatabaseFactory,而应该为每个不同的连接创建一个新的数据库类。以下是Yang's Net Zone的内容:
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");
使用Microsoft.Practices.EnterpriseLibrary.Data;
使用Microsoft.Practices.EnterpriseLibrary.Configuration;
使用Microsoft.Practices.EnterpriseLibrary.Data.Configuration;
DatabaseSettings=新的DatabaseSettings();
//这映射到数据配置文件中的元素
DatabaseTypeData type=new DatabaseTypeData(“Sql Server”、“Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabase、Microsoft.Practices.EnterpriseLibrary.Data,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”);
设置。数据库类型。添加(类型);
//这映射到数据配置文件中的元素
ConnectionStringData connectionString=新的ConnectionStringData(“localhost.EntLibQuickStarts”);
//以下映射到数据配置文件中的元素
ParameterData param=新的ParameterData(“服务器”、“本地主机”);
connectionString.Parameters.Add(参数);
param=新参数数据(“数据库”、“EntLibQuickStarts”);
connectionString.Parameters.Add(参数);
param=新参数数据(“集成安全性”、“真”);
connectionString.Parameters.Add(参数);
settings.connectionString.Add(connectionString);
//太糟糕了,编译器将InstanceData与System.Diagnostics.InstanceData混淆。它映射到数据配置文件中的元素
Microsoft.Practices.EnterpriseLibrary.Data.Configuration.InstanceData实例=新的Microsoft.Practices.EnterpriseLibrary.Data.Configuration.InstanceData(“localhost”、“Sql Server”、“localhost.EntLibQuickStarts”);
settings.Instances.Add(实例);
ConfigurationDictionary配置=新建ConfigurationDictionary();
//这是如何将数据库设置与ConfigurationDictionary联系起来的。它映射到App.config文件configurations.Add(“dataConfiguration”,settings)中的元素;
ConfigurationContext=ConfigurationManager.CreateContext(配置);
Database Database=新建DatabaseProviderFactory(上下文).CreateDatabase(“localhost”);
看看这个:
只要使用下面的代码,就可以在运行时创建数据库
database mydb = new EnterpriseLibrary.Data.Sql.SqlDatabase("connection string here");
它解决了我的问题。
我有一个单一的web应用程序使用多个数据库,根据url中的不同子域连接到不同的数据库。
例如:
- abc.test.com----->使用Db_项目abc
- def.test.com------->使用db_ProjectDEF
谢谢我们可以使用以下代码片段连接到多个数据库 要添加为参考的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");
项目符号和代码不能很好地相互配合,需要在两者之间添加一些文本才能真正格式化:-)