[英]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=&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时是否有办法逃避“&”的更改?
您可以在保存之前使用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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.