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

时间:2018-11-16 17:50:55

标签: c# asp.net web-applications connection-string configurationmanager

我有一个配置管理器,用于在使用前设置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();

这可以保存连接字符串,但这是保存到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" />

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

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

有人知道在保存到web.config时是否有逃脱'&'更改的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以在保存之前使用System.Web.HttpUtility.HtmlDecode,因为保存时会使用HTML编码对其进行编码。

如果执行此操作,它将把&quot;转换为",并在保存时将"转换回&quot;

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

section.ConnectionStrings["DALEntities"].ConnectionString = System.Web.HttpUtility.HtmlDecode(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();

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

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);