如何在连接字符串中包含&符号?

use*_*830 55 c# asp.net configuration entity-framework-4

我正在将Entity Framework 4用于一个简单的应用程序,并希望将我的连接凭据烘焙到以下连接字符串中:

<connectionStrings>
    <add name="MyEntities"    
         connectionString="metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost\DEV;Initial Catalog=MyDB;UserId=myUser;Password=jack&jill;MultipleActiveResultSets=True&quot;" 
         providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

但是,密码(我无法更改)包含&符号.ASP.NET抛出: Configuration Error: An error occurred while parsing EntityName. Line XX, position YYY.

如果我用密码替换密码中的&符号&amp;,我得到一个SqlException: Login failed for user 'myUser'. 通常这个技巧可行,但我猜测某些东西是失败的,因为这在技术上是连接字符串中的连接字符串.

我该怎么办?我的大多数课程包括以下代码:

using (var context = new MyEntities()) {
   // do work
}
Run Code Online (Sandbox Code Playgroud)

更新: 事实证明我使用的凭据是域帐户,所以我真正需要的是Integrated Security=True连接字符串而不是密码.

按照接受的答案中的指示对&符号进行编码应该可以正常工作,尽管我还没有测试过.

hun*_*ter 92

您需要像使用任何XML文档一样使用转义序列,这是所有.config文件.

  • Ampersand =&= &amp;
  • 大于=> = &gt;
  • 小于= <= &lt;
  • 撇号='= &apos;
  • Quote ="= &quot;

您也可以使用CDATA标记,以便您可以使用这些非法字符

<![CDATA[ 最后以 ]]>

<connectionStrings>
    <add name="MyEntities" connectionString="
        metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;
        provider=System.Data.SqlClient;
        provider connection string=&quot;
        Data Source=localhost\DEV;
        Initial Catalog=MyDB;UserId=myUser;
        Password=<![CDATA[jack&jill]]>;
        MultipleActiveResultSets=True&quot;" 
        providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

  • CDATA的东西似乎不起作用.至少,当您尝试将其放入web.config时,Visual Studio的XML编辑器会抱怨. (4认同)
  • 另外,让我只是评论说逃避XML字符通常可以正常工作.例如,在web.config文件中的<identity impersonate ='true'/>标记中.但是,我认为您不允许在XML属性中放置CDATA部分(XML 1.0规范部分3.3.3). (2认同)