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



我有一个配置管理器,用于在使用之前设置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(),只得到一个简单的字符串。

有人知道是否有办法逃脱"&amp保存到web.config时?

您可以在保存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);

最新更新