我在app.config中有如下连接字符串
<add name="CONN" connectionString="SERVER=SERVER\SQLEXPRESS;DATABASE=TRIAL_LINK;uid=sa;pwd=trial"
providerName="System.Data.SqlClient" />
我有一个名为DBLinker的表单,我给了用户选择其他服务器和数据库的选项。 例如,我选择服务器名称为“MAILSERVER”,数据库选择为“实际”。我使用以下代码覆盖app.config文件。
Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
Dim mySection As ConnectionStringsSection = DirectCast(config.GetSection("CONN"),ConnectionStringsSection)
Dim conStr As String = "SERVER=MAILSERVER;DATABASE=Actual;uid=sa;pwd=trial"
config.ConnectionStrings.ConnectionStrings("CONN").ConnectionString = conStr
config.Save(ConfigurationSaveMode.Full)
ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name)
在此代码之后我试图打开应用程序的登录表单。但是当我在这里尝试访问连接字符串时,它正在获取前一个字符串而不是更新的字符串。
答案 0 :(得分:2)
How to programmatically override web.config settings
看起来您无法在运行时更改web.config并使其在应用程序运行时生效。您可以通过将设置作为字符串的基本部分来解决此问题,然后使用用户选择来构建其余部分。您可以随时将新字符串保存在Session,cookie或Db中,以便在需要时将其保存起来,具体取决于您的需求。
希望这有帮助。
答案 1 :(得分:1)
Public Sub updateConfigFile(ByVal con As String)
'updating config file
Dim XmlDoc As New XmlDocument()
'Loading the Config file
XmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile)
For Each xElement As XmlElement In XmlDoc.DocumentElement
If xElement.Name = "connectionStrings" Then
'setting the coonection string
xElement.FirstChild.Attributes(2).Value = con
End If
Next
'writing the connection string in config file
XmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile)
End Sub
我使用此代码来解决此问题。