您可以像这样在运行时更改连接字符串。您可以将连接字符串设置作为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。
我上面展示的相同原理可以某种方式应用于第二个连接字符串吗?
答案 0 :(得分: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)。我没有测试过在类库中使用不同的连接名称,但认为它应该没关系。
答案 1 :(得分: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()
答案 2 :(得分:0)
感谢您在博客上留言。是的,它几乎不是运行时间,因为它要求您停止运行以获取更改。遗憾的是,由于设置只加载一次(加载应用程序域时),因此设置基础架构无法在运行时获取更改。
唯一的选择是重新启动应用程序或重新启动应用程序池(如果是Web应用程序)。除此之外,你必须自己动手。
我尽我所能: - )