2009-01-16 88 views
3

您可以像這樣在運行時更改連接字符串。你讓連接字符串寫爲MySettings類中一個單獨的屬性設置可供選擇:當應用程序被初始化在運行時從主應用程序的類庫更改連接字符串

Partial Friend NotInheritable Class MySettings 
    Public WriteOnly Property RunTimeConnectionString() 
     Set(ByVal value) 
      My.Settings("MyConnectionString") = value 
     End Set 
    End Property 
End Class 

然後,在某個地方(使用類型化數據集的任何表適配器之前),喜歡寫東西:

My.Settings.RunTimeConnectionString = My.Settings.ProductionConnectionString 

其中ProductionConnectionString是一個簡單的String設置。這是一個用戶範圍設置,因此每個用戶都可以通過調用My.Settings.Save()爲其進行更改(通過爲其分配一個值)並保存它。

此代碼適用於連接字符串最初是在主項目中創建的,並存儲在它的設置(= app.config文件)中。

app.config中的連接字符串實際上有一個更長的名稱:MyApp.MySettings.MyConnectionString。

當您在類庫項目中的app.config中存儲連接字符串並在主項目中引用該項目時,app.config文件將以某種方式合併,因此類庫具有設置。

不知道該怎麼做的事情是在運行時從類庫中改變一個設置。我可以將連接字符串設置從類庫複製到主項目的app.config。我必須保持相同的名稱,如下所示:MyClassLibrary.My.MySettings.MyConnectionString。

我可以將上面顯示的相同原理以某種方式應用於此第二個連接字符串嗎?

回答

1

我測試多一點,並且發現了相同的解決方案可以類庫內部使用。

我提出了一個新類(在類庫)與這樣的共享(靜態)方法:

Public Class MySettingsChanger 
    Public Shared Sub SetConnectionString(ByVal cnnString As String) 
     My.Settings.RunTimeConnectionString = cnnString 
    End Sub 
End Class 

並延長了MySettings類(在類庫)的方式在主同項目:

Namespace My 
    Partial Friend NotInheritable Class MySettings 
     Public WriteOnly Property RunTimeConnectionString() 
      Set(ByVal value) 
       My.Settings("MyConnectionString") = value 
      End Set 
     End Property 
    End Class 
End Namespace 

至少它適用於我的情況。主項目和類庫中的連接名稱僅相同(簡稱,不是整個ProjectNamespace.MySettings.ConnectionName)。我沒有在類庫中使用不同的連接名稱進行測試,但認爲它應該沒有關係。

+0

我真的很感激,如果有人會證實這一點。 – 2009-01-19 11:31:05

0

我搜索了更多,並找到了一種方法,但它不是真正的運行時。至少不是我希望的運行時間。無論如何,這裏是代碼,我測試了它,它的工作,但要求我重新啓動應用程序第一個這對我來說不是很運行。

Dim configLocation As String = Reflection.Assembly.GetExecutingAssembly().Location 
    Dim config As Configuration.Configuration = Configuration.ConfigurationManager.OpenExeConfiguration(configLocation) 
    config.ConnectionStrings.ConnectionStrings.Clear() 
    For i As Integer = 0 To Configuration.ConfigurationManager.ConnectionStrings.Count - 1 
     Dim connection As New Configuration.ConnectionStringSettings(Configuration.ConfigurationManager.ConnectionStrings(i).Name, My.Settings.ProductionConnectionString) 
     connection.ProviderName = Configuration.ConfigurationManager.ConnectionStrings(i).ProviderName 
     config.ConnectionStrings.ConnectionStrings.Add(connection) 
    Next 
    config.Save() 

This is the article where I found this code.

0

感謝博客上的留言。是的,它幾乎不需要運行時間,因爲它需要您停止運行才能獲取更改。不幸的是,因爲設置只加載一次(加載應用程序域時),所以設置基礎結構無法在運行時獲取更改。

唯一的選擇是重新啓動應用程序或者在web應用程序中回收應用程序池。除此之外,你將不得不推出自己的。

我已經盡全力了,我可以:-)

相關問題