[英]How to change Database in Enterprise Library 5.0
我創建了一個數據庫對象
sqlDB = EnterpriseLibraryContainer.Current
.GetInstance<Database>("ProdConn");
但是稍后在代碼中,我想更改數據庫名稱。 在以前的企業版本中,我們使用
conn.ChangeDatabase("ABCD");
更改數據庫,但是我們如何在這里做呢?
請指教。
謝謝,Mujeeb。
我認為ChangeDatabase
不是企業庫方法(在4.1版中也找不到)。 我認為這只是IDbConnection
上的ADO方法 。
我可以想到3種方法來做自己想要的事情:
Database
對象 我個人認為這是最干凈的選擇。 將數據庫添加為配置中的新條目,並將其視為單獨的數據庫。 但是,如果由於設計時不知道數據庫名稱或從其他系統檢索數據庫名稱而需要支持動態數據庫,則此方法將無效。
您可以檢索連接並僅使用ADO.NET(我想這可能是您已經在做的事情?):
// Get Original EL DB
Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>("MYDB");
object result = db.ExecuteScalar(CommandType.Text,
"select top 1 name from sysobjects");
Console.WriteLine(result);
// Change DB with ADO.NET
using (IDbConnection conn = db.CreateConnection())
{
conn.Open();
conn.ChangeDatabase("AnotherDB");
using (IDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select top 1 RoleName from Roles";
cmd.CommandType = CommandType.Text;
result = cmd.ExecuteScalar();
}
}
Console.WriteLine(result);
但是,將EL代碼與ADO.NET代碼混合會感覺有些錯誤。
除了使用ADO.NET,還可以使用企業庫Database
類。 您不能修改ConnectionString
(它是readonly
),但是可以使用新的連接字符串創建一個新的Database
對象。
// Get Original EL DB
Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>("MYDB");
object result = db.ExecuteScalar(System.Data.CommandType.Text,
"select top 1 name from sysobjects");
Console.WriteLine(result);
// Change Database
DbConnectionStringBuilder builder = new DbConnectionStringBuilder()
{
ConnectionString = db.ConnectionString
};
builder["database"] = "AnotherDB";
// Create new EL DB using new connection string
db = new GenericDatabase(builder.ConnectionString, db.DbProviderFactory);
result = db.ExecuteScalar(CommandType.Text,
"select top 1 RoleName from Roles");
Console.WriteLine(result);
我認為這看起來比選項2更好。我們可以通過將更改數據庫邏輯添加到輔助方法或擴展方法中來使它更加簡潔:
public static class DatabaseExtensions
{
public static Database ChangeDatabase(this Database db, string databaseName)
{
// Change Database
DbConnectionStringBuilder builder = new DbConnectionStringBuilder()
{
ConnectionString = db.ConnectionString
};
builder["database"] = databaseName;
// Create new EL DB using new connection string
return new GenericDatabase(builder.ConnectionString,
db.DbProviderFactory);
}
}
...
// Get Original EL DB
Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>("MYDB");
object result = db.ExecuteScalar(System.Data.CommandType.Text,
"select top 1 name from sysobjects");
Console.WriteLine(result);
db = db.ChangeDatabase("AnotherDB");
result = db.ExecuteScalar(CommandType.Text,
"select top 1 RoleName from Roles");
Console.WriteLine(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.