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

Posted

技术标签:

【中文标题】如何在连接字符串中包含与号?【英文标题】:How to include ampersand in connection string? 【发布时间】:2011-04-18 23:16:38 【问题描述】:

我正在为一个简单的应用程序使用 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>

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

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

我应该在这里做什么?我的大部分课程都包含如下代码:

using (var context = new MyEntities()) 
   // do work


更新:原来我使用的凭据是域帐户,所以我真正需要的是连接字符串中的Integrated Security=True,而不是密码。

按照接受的答案应该对 & 符号进行编码,虽然我还没有测试过。

【问题讨论】:

【参考方案1】:

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

与号 = & = &amp;amp; 大于=>=&amp;gt; 小于 = &lt; 撇号 = ' = &amp;apos; 引用 = " = &amp;quot;

你也可以使用CDATA标签,这样你就可以使用这些非法字符

&lt;![CDATA[ 并以]]&gt; 结尾

<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>

【讨论】:

我已经尝试过了,正如我的问题中所述。似乎错误的密码被发送到实体框架。 另外,让您尝试使用应用程序外部连接字符串中的凭据登录到该 SQL Server 实例 另外,让我评论说转义 XML 字符通常可以正常工作。例如,在 web.config 文件中的 标记中。但是,我认为您不允许将 CDATA 部分放在 XML 属性中(XML 1.0 规范第 3.3.3 节)。 CDATA 的东西似乎不起作用。至少,当您尝试将其放入 web.config 时,Visual Studio 的 XML 编辑器会报错。 请注意:如果您的特殊字符是最后一个字符,请注意末尾有 2 个分号。一个用于转义序列,一个用于分隔连接参数。

以上是关于如何在连接字符串中包含与号?的主要内容,如果未能解决你的问题,请参考以下文章

无法通过引用 C++ 传递值

如何在 QT 的语言翻译中使用与号字符串

如何使用与号 (&) 替换匹配模式中的字符

在连接字符串中包含服务名称的语法是啥?

Swift - 有没有办法在连接字符串中包含单引号(')?

如何在 Javascript 连接的字符串上强制换行?