我创建了一个db对象
sqlDB = EnterpriseLibraryContainer.Current .GetInstance<Database>("ProdConn");
但后来在代码中,我想更改数据库名称.
在以前的企业版中,我们使用
conn.ChangeDatabase("ABCD");
请指教.
谢谢,
Mujeeb.
解决方法
我不认为ChangeDatabase是企业库方法(我也无法在4.1版中找到它).我认为这只是一个
ADO method on
IDbConnection
.
>在Enterprise Library配置中创建新数据库条目并使用该值
>使用ADO.NET更改连接并执行数据访问
>使用不同的数据库值以编程方式创建新的Enterprise Library Database对象
就个人而言,我认为这是最干净的选择.将数据库添加为配置中的新条目,并将其视为单独的数据库.但是,如果您需要支持动态数据库,因为数据库名称在设计时未知或从其他系统检索,则无法运行.
2.使用ADO.NET
您可以检索连接并只使用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代码混合使用感觉有点不对劲.
3.创建新的企业库数据库对象
您可以使用Enterprise Library Database类,而不是使用ADO.NET.您不能修改ConnectionString(它是只读的),但您可以使用新的连接字符串创建新的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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。