C# 在ASP web.config中编辑连接字符串包括使用符号和

C# 在ASP web.config中编辑连接字符串包括使用符号和,c#,asp.net,web-applications,connection-string,configurationmanager,C#,Asp.net,Web Applications,Connection String,Configurationmanager,我有一个配置管理器,用于在使用之前设置web应用程序。此配置管理器中包括数据库连接字符串的设置。我有可以修改连接字符串并保存的工作代码,但我遇到了一个似乎无法纠正的问题 连接字符串包含一个“&”字符,因此当该字符串保存到web.config文件时,该字符串将从“&”更改为“&;”。我尝试了一些不同的代码变体来克服这个问题,但没有任何效果 以下是保存连接字符串的代码: System.Configuration.Configuration config = System.Web.Configu

我有一个配置管理器,用于在使用之前设置web应用程序。此配置管理器中包括数据库连接字符串的设置。我有可以修改连接字符串并保存的工作代码,但我遇到了一个似乎无法纠正的问题

连接字符串包含一个“&”字符,因此当该字符串保存到web.config文件时,该字符串将从“&”更改为“
&;
”。我尝试了一些不同的代码变体来克服这个问题,但没有任何效果

以下是保存连接字符串的代码:

System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;

section.ConnectionStrings["DALEntities"].ConnectionString = string.Format("metadata=res://*/DALModel.csdl|res://*/DALModel.ssdl|res://*/DALModel.msl;provider=System.Data.SqlClient;provider connection string="data source={0};initial catalog={3};persist security info=True;user id={1};password={2};multipleactiveresultsets=True;application name=EntityFramework"", settings.SQLserverName, settings.SQLuserName, settings.SQLpassword, settings.SQLdatabaseName);

config.Save();
section.ConnectionStrings["DALEntities"].ConnectionString = string.Format("metadata=res://*/DALModel.csdl|res://*/DALModel.ssdl|res://*/DALModel.msl;provider=System.Data.SqlClient;provider connection string=\"data source={0};initial catalog={3};persist security info=True;user id={1};password={2};multipleactiveresultsets=True;application name=EntityFramework\"", settings.SQLserverName, settings.SQLuserName, settings.SQLpassword, settings.SQLdatabaseName);
这可用于保存连接字符串,但这是保存到web.config文件的内容:

<add name="DALEntities" connectionString="metadata=res://*/DALModel.csdl|res://*/DALModel.ssdl|res://*/DALModel.msl;provider=System.Data.SqlClient;provider connection string=&amp;quot;data source=.\SQL2012;initial catalog=tooling_041718;persist security info=True;user id=mm;password=mm;multipleactiveresultsets=True;application name=EntityFramework&amp;quot;" providerName="System.Data.EntityClient" />

如您所见,
&已添加到连接字符串的两个不同位置

我尝试过使用
“+Regex.Escape(“&”)+”
而不是字符串中这两个不同点的“&”来转义“&”字符,并且尝试过取出
string.Format()
,只得到一个简单的字符串


有人知道在保存到web.config时是否有办法避免对“&”的更改吗?

您可以在保存之前使用
System.web.HttpUtility.HtmlDecode
,因为在保存时,它使用HTML编码

如果您这样做,它会将
转换为
,保存时,它会将
转换回

或者您可以直接在连接字符串中编写
(带转义:
\”
)而不是

System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;

section.ConnectionStrings["DALEntities"].ConnectionString = string.Format("metadata=res://*/DALModel.csdl|res://*/DALModel.ssdl|res://*/DALModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source={0};initial catalog={3};persist security info=True;user id={1};password={2};multipleactiveresultsets=True;application name=EntityFramework&quot;", settings.SQLserverName, settings.SQLuserName, settings.SQLpassword, settings.SQLdatabaseName);

config.Save();
section.ConnectionStrings["DALEntities"].ConnectionString = string.Format("metadata=res://*/DALModel.csdl|res://*/DALModel.ssdl|res://*/DALModel.msl;provider=System.Data.SqlClient;provider connection string=\"data source={0};initial catalog={3};persist security info=True;user id={1};password={2};multipleactiveresultsets=True;application name=EntityFramework\"", settings.SQLserverName, settings.SQLuserName, settings.SQLpassword, settings.SQLdatabaseName);

是的,就是这样。非常感谢!第一个建议是这个答案的最佳答案。这样,我可以查看字符串在保存到web.config前后的外观。保存前后都应该可以看到“”。非常感谢。