在运行时设置数据库连接字符串

问题描述:

我正在使用MVC 4网站。它应该允许用户根据用户在视图中的选择来选择要连接的数据库。所有的数据库都有相同的表结构和架构等。在运行时设置数据库连接字符串

我有一个数据库连接字符串在Web.config文件中定义,允许连接到第一个数据库。

<connectionStrings> 
    <add name="DBConnectionString" connectionString="Data Source=DATABSE_SERVER;Initial Catalog=DATABASE_NAME;Persist Security Info=True;User ID=USERNAME;Password=PASSWORD" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

我也使用Linq DataContext来初始化连接到数据库。表映射全部由MVC 4中的Linq to SQL自动生成。

public NEMP_DataDataContext() : 
      base(global::System.Configuration.ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString, mappingSource) 
{ 
    OnCreated(); 
} 

实现此目的的最佳方法是什么?

+4

请不要只问我们要解决的问题为您服务。告诉我们你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“[您尝试过什么?](http://whathaveyoutried.com/)”,以获得一篇您最近需要阅读的优秀文章。 – 2014-11-21 03:24:52

在LINQ to SQL,你只要创建一个连接字符串的语境:

DataContext myContext = new DataContext(customConnectionString); 

你并不需要担心关闭它们或任何东西。 SQL Server正在为你处理所有这些。因此,您只需简单地调整连接字符串(数据库名称)并根据您需要使用上下文的每个页面中的任何变量创建新的上下文。

您可以使用SqlConnection

ChangeDatabase方法见MSDN

+0

它适用于LINQ吗? – alextc 2014-11-21 03:41:09

  1. 首先,你应该有一个存储来获得所有的数据库连接。 也许存储是一个xml文件或一个简单的数据库。 但是你需要实现如何获取连接字符串。

  2. 如果您在应用程序中使用了EntityFramework作为您的dataconext。 你可以像如下因素代码构造:

    public ApplicationDbContext(string nameOfConnection) 
        : base(nameOfConnection) 
    { 
        this.Configuration.ProxyCreationEnabled = true; 
        this.Configuration.LazyLoadingEnabled = true; 
    } 
    
  3. 请调用1,并获得nameOfConneciton,然后调用2初始化的DbContext。

+0

对不起,我没有使用EF,而是使用LINQ。 – alextc 2014-11-21 03:55:51

+0

但理论是一样的。你可以像这样尝试。 – 2014-11-21 04:55:51

我不确定我是否完全理解您的问题。但我假设你问我们,你想让用户选择他们想要连接的数据库。然后设置连接字符串。

这里是我的解决方案,例如,如果您有5个数据库让用户选择。您将这5个连接字符串写入web.config。然后制作一个下拉列表或单选按钮,让用户选择数据库。然后做一个if语句。例如,如果第一个单选按钮被选中,那么

String connection string=connection.string["the name of connection string in web.confug"]; 

我希望这可以帮助您