Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Enterprise Library 5.0中更改数据库_C#_.net_Asp.net_Enterprise Library_Enterprise - Fatal编程技术网

C# 如何在Enterprise Library 5.0中更改数据库

C# 如何在Enterprise Library 5.0中更改数据库,c#,.net,asp.net,enterprise-library,enterprise,C#,.net,Asp.net,Enterprise Library,Enterprise,我创建了一个db对象作为 sqlDB = EnterpriseLibraryContainer.Current .GetInstance<Database>("ProdConn"); 要更改数据库,但我们如何在此处进行更改 请给我一些建议 谢谢, Mujeeb.我不认为ChangeDatabase是一种企业库方法(我在4.1版中也找不到)。我想这只是一个例子 我可以想出三种方法来满足您的需求: 在企业库配置中创建新的数据库条目并使用该值 使用ADO.NET更改连接并执行数据

我创建了一个db对象作为

sqlDB = EnterpriseLibraryContainer.Current
    .GetInstance<Database>("ProdConn");
要更改数据库,但我们如何在此处进行更改

请给我一些建议

谢谢,
Mujeeb.

我不认为
ChangeDatabase
是一种企业库方法(我在4.1版中也找不到)。我想这只是一个例子

我可以想出三种方法来满足您的需求:

  • 在企业库配置中创建新的数据库条目并使用该值
  • 使用ADO.NET更改连接并执行数据访问
  • 使用不同的数据库值以编程方式创建新的企业库
    数据库
    对象
  • 1.在配置中创建一个新的数据库条目 我个人认为这是最干净的选择。在配置中将数据库添加为新条目,并将其视为单独的数据库。但是,如果您需要支持动态数据库,因为数据库名称在设计时未知,或者是从其他系统检索的,那么这将不起作用

    2.使用ADO.NET 您可以检索一个连接,只需使用ADO.NET(我想这可能是您已经在做的事情):

    我认为这看起来比选项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);
        }
    }
    

    //获取原始EL DB
    Database db=EnterpriseLibraryContainer.Current.GetInstance(“MYDB”);
    对象结果=db.ExecuteScalar(System.Data.CommandType.Text,
    “从sysobjects中选择前1名”);
    控制台写入线(结果);
    db=db.ChangeDatabase(“另一个db”);
    结果=db.ExecuteScalar(CommandType.Text,
    “从角色中选择前1个角色名称”);
    控制台写入线(结果);
    
    谢谢Tuzo。。。“帮助”确实非常有用。@Mujji:另一个选项可能是在数据库对象前面加上数据库和架构名称。例如,
    SELECT*FROM[msdb].[dbo].[syscategories];从[master].[dbo].[spt_值]中选择*
    // 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);
    
    // 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);
    
    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);