C# 在C中运行时读取、写入和更新app.config文件中的connectionstring#

C# 在C中运行时读取、写入和更新app.config文件中的connectionstring#,c#,winforms,connection-string,app-config,C#,Winforms,Connection String,App Config,我已经为连接设置创建了一个表单,用户可以在其中更新服务器名称、datatbase以及用户id和密码。我已将连接字符串存储在app.config文件中 我的问题是,如何在运行时更新app.config文件中的连接字符串,如何在第一次通过表单上的文本框更改连接字符串的信息,文本框将在第一次之后显示服务器名称、id、密码的信息 这里是我的app.config <?xml version="1.0" encoding="utf-8" ?> <configuration>

我已经为连接设置创建了一个表单,用户可以在其中更新服务器名称、datatbase以及用户id和密码。我已将连接字符串存储在app.config文件中

我的问题是,如何在运行时更新app.config文件中的连接字符串,如何在第一次通过表单上的文本框更改连接字符串的信息,文本框将在第一次之后显示服务器名称、id、密码的信息

这里是我的app.config

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="Data123.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>   
    </configSections>
  <connectionStrings>
   <add name="Data123Entities" connectionString="metadata=res://*/Data123DB.csdl|res://*/Data123DB.ssdl|res://*/Data123DB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=nguyenduyhai;initial catalog=Data123;persist security info=True;user id=sa;password=1234567;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    <!--<add name="Data123Entities" connectionString="metadata=res://*/Data123DB.csdl|res://*/Data123DB.ssdl|res://*/Data123DB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=NGUYENDUYHAI\SQLEXPRESS;initial catalog=Data123;persist security info=True;user id=sa;password=1234567;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />-->
  </connectionStrings>
</configuration>

您是否尝试在发布文件夹中运行应用程序?
因为在调试模式下不会改变。

使用System.Xml.Linq它将类似于:

var doc = XElement.Load(fileName); 
var target = doc.Element("configuration").Elements("configurationStrings").Where(e => e.Element("name").Value == "Data123Entities").Single(); 
target.Element("connectionString").Value = "metadata=res://*/Data123DB.csdl|res://*/Data123DB.ssdl|res://*/Data123DB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=" + dataSource + ";initial catalog=" + initCatalog + ";persist security info=True;user id=sa;password=1234567;MultipleActiveResultSets=True;App=EntityFramework&quot;"
doc.Save(fileName);

从配置中读取很容易,使用Configuration Manager名称空间向配置中写入总是一件麻烦事。直接使用XML:您能详细地指导我吗,我非常感谢您能参考下面的链接当然我在发布文件夹中运行了它,但仍然不起作用,您认为我的代码有错误吗?我的文件名=AppDomain.CurrentDomain.SetupInformation.ConfigurationFile但我得到了这个,System.NullReferenceException是未处理的消息:ShinEtsu.exe中发生“System.NullReferenceException”类型的未处理异常其他信息:对象引用未设置为对象的实例。对象引用未设置为对象的实例。是最流行的.net错误消息。。。我很抱歉,但你必须通过谷歌搜索你的方式来解决它。。。这太简单了-一步一步地检查代码,直到你得到异常,然后在失败的那一行上查看哪个对象是空的!!!您给我的最后一个问题是var target=doc.Element(“配置”).Elements(“配置字符串”).Where(e=>e.Element(“名称”).Value==“Data123Entities”).Single();但是我在上面的app.config中没有看到任何“configurationStrings”部分,是它错了还是我遗漏了什么?
var doc = XElement.Load(fileName); 
var target = doc.Element("configuration").Elements("configurationStrings").Where(e => e.Element("name").Value == "Data123Entities").Single(); 
target.Element("connectionString").Value = "metadata=res://*/Data123DB.csdl|res://*/Data123DB.ssdl|res://*/Data123DB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=" + dataSource + ";initial catalog=" + initCatalog + ";persist security info=True;user id=sa;password=1234567;MultipleActiveResultSets=True;App=EntityFramework&quot;"
doc.Save(fileName);