c# – 如何在Enterprise Library 5.0中更改数据库
我创建了一个db对象
sqlDB = EnterpriseLibraryContainer.Current .GetInstance<Database>("ProdConn"); 但后来在代码中,我想更改数据库名称. conn.ChangeDatabase("ABCD"); 更改数据库,但我们如何在这里做到这一点? 请指教. 谢谢, 解决方法
我不认为ChangeDatabase是企业库方法(我也无法在4.1版中找到它).我认为这只是一个
ADO method on
IDbConnection .
我有三种方法可以做你想做的事: >在Enterprise Library配置中创建新数据库条目并使用该值 1.在Config中创建新的数据库条目 就个人而言,我认为这是最干净的选择.将数据库添加为配置中的新条目,并将其视为单独的数据库.但是,如果您需要支持动态数据库,因为数据库名称在设计时未知或从其他系统检索,则无法运行. 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |