2014-11-21 83 views
0

我正在使用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

回答

0

在LINQ to SQL,你只要創建一個連接字符串的語境:

DataContext myContext = new DataContext(customConnectionString); 

你並不需要擔心關閉它們或任何東西。 SQL Server正在爲你處理所有這些。因此,您只需簡單地調整連接字符串(數據庫名稱)並根據您需要使用上下文的每個頁面中的任何變量創建新的上下文。

0

您可以使用SqlConnection

ChangeDatabase方法見MSDN

+0

它適用於LINQ嗎? – alextc 2014-11-21 03:41:09

0
  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

-1

我不確定我是否完全理解您的問題。但我假設你問我們,你想讓用戶選擇他們想要連接的數據庫。然後設置連接字符串。

這裏是我的解決方案,例如,如果您有5個數據庫讓用戶選擇。您將這5個連接字符串寫入web.config。然後製作一個下拉列表或單選按鈕,讓用戶選擇數據庫。然後做一個if語句。例如,如果第一個單選按鈕被選中,那麼

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

我希望這可以幫助您