繁体   English   中英

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

[英]Editing Connection String in ASP web.config include using ampersand

我有一个配置管理器,用于在使用前设置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时是否有办法逃避“&”的更改?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM