我有一个配置管理器,用于在使用前设置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=&quot;data source=.\SQL2012;initial catalog=tooling_041718;persist security info=True;user id=mm;password=mm;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
如您所见,&
被添加到连接字符串的两个不同位置。
我尝试通过在字符串的两个不同位置使用" + Regex.Escape("&") + "
而不是“&”来转义'&'字符,并且我尝试取出string.Format()
并得到一个简单的字符串
有人知道在保存到web.config时是否有逃脱'&'更改的方法吗?
答案 0 :(得分:1)
您可以在保存之前使用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 = System.Web.HttpUtility.HtmlDecode(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);