2013-02-19 70 views
2

我發現了一個解決方案,它必須適用於舊版本,然後是vs2010。我想知道如何爲vs2010做到這一點?有人知道嗎?在運行時更改數據集連接字符串vs2010

http://www.csharpbydesign.com/2008/01/overriding-dataset-settings-co.html

讓我解釋更詳細一點。

我有一個C#生成的數據集。如何更改連接字符串,以便可以將數據集與另一個(結構相同但數據填充不同的)數據庫結合使用?這必須在運行時發生,因爲我不知道編譯時的服務器或數據庫名稱。我使用VS2010和SQL Server 2008 R2快速

+0

你是什麼意思?你的意思是你想在運行時從一個連接開始讀取,然後在讀取過程中切換連接? – 2013-02-19 16:31:01

+0

您應該注意,您的意思是通過設計器創建的強類型數據集。 – 2013-02-19 16:32:59

回答

5

我覺得有沒有簡單的方法,並因爲它的設置爲每個TableAdapter您不能以編程方式更改連接字符串整個DataSet

您需要使用/創建部分類TableAdapter的更改連接字符串,因爲Connection屬性爲internal(如果你的DAL是在不同的組件)。不要更改designer.cs文件,因爲它將在設計器的下一次更改後自動重新創建。要創建它,只需右鍵單擊DataSet並選擇「顯示代碼」。

例如(假設TableAdapter被命名爲ProductTableAdapter):

namespace WindowsFormsApplication1.DataSet1TableAdapters 
{ 
    public partial class ProductTableAdapter 
    { 
     public string ConnectionString { 
      get { return Connection.ConnectionString; } 
      set { Connection.ConnectionString = value; } 
     } 
    } 
} 

現在你可以很容易地改變它:

var productTableAdapter = new DataSet1TableAdapters.ProductTableAdapter(); 
productTableAdapter.ConnectionString = someOtherConnectionString; 

這裏是我的樣本數據集的screesnhot和創建的文件DataSet1.cs

enter image description here

+0

謝謝你的幫助添。當我試圖添加代碼連接未找到。 – user1304232 2013-02-19 17:00:57

+0

@ user1304232:那麼您是否創建了一個與您的DataSet設計器具有相同名稱的類? 'partial'屬性和正確的名稱空間非常重要。如果您不確定它們是如何命名的,請查看'... designer.cs'文件。編輯我的答案以顯示截圖。 – 2013-02-19 17:12:10

+0

明白了。這就是我需要的。謝謝。 – user1304232 2013-02-19 18:17:22

0

實際上有更簡單的方法來更改連接字符串。 轉到設置屏幕,其中連接字符串顯示爲連接字符串。 首先標記並複製顯示的連接字符串。 然後將連接字符串的類型更改爲字符串。該字符串的文本將更改爲包含xml。 然後將複製的連接字符串粘貼到xml文本上。 然後將範圍從應用程序更改爲用戶。

當我想更改連接字符串時,我使用下面的代碼。

// assign the path to use to the variable fullpath (or whatever) 
string newConnection = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", fullpath);    
Properties.Settings.Default.HootConnectionString = newConnection; 
Properties.Settings.Default.Save(); 

在我的情況,我有一個全局數據集活動,所以我必須讓數據重新由tableadapter。當然,你必須添加錯誤控制來確保數據庫仍然存在。

您會注意到這不會改變應用程序設置中顯示的內容。這些都是默認設置。

這適用於Access數據庫;所以你的里程和要求可能有所不同。

編輯:警告。在安裝時,連接字符串可以很好地用於打開和讀取數據庫內容,但它會在嘗試更新數據庫時抱怨沒有連接字符串。

相關問題