web.config连接字符串中的转义引号


87

我的网络配置中有一个连接字符串:

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass"word" providerName="System.Data.SqlClient" />

如您所见,密码中有一个引号(“)(由其他部门提供。我无法更改此数据库用户的密码)。

如何在该连接字符串中转义引号?

顺便说一句:我已经尝试过&quot; 在字符串中。那是行不通的-ado.net然后收到ArgumenException:“初始化字符串的格式不符合从索引57开始的规范。” 57是“ 在我的连接字符串中。我也尝试将密码部分括在'-也不起作用。

还尝试了“”和“ \”-无法解析web.config。

感谢您的解决方案:

我必须结合使用双引号的转义和将密码放在单引号中:

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'" providerName="System.Data.SqlClient" />

Answers:


109

使用&quot;代替"逃脱它。

web.config是一个XML文件,因此您应该使用XML转义。

connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

查看论坛主题。

更新

&quot;应该可以工作,但事实并非如此,您是否尝试过.NET的其他一些字符串转义序列?\"""

更新2:

尝试为connectionString用单引号引起来:

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass"word'

要么:

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word'

更新3:

MSDN(SqlConnection.ConnectionString属性):

若要包含包含分号,单引号字符或双引号字符的值,则该值必须用双引号引起来。如果该值同时包含分号和双引号字符,则该值可以用单引号引起来。

所以:

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"

问题不在于web.config,而是连接字符串的格式。在连接字符串中,如果您"在键值对中有一个in值,则需要将该值括在中'。因此,虽然Password=somepass"word行不通,Password='somepass"word'但行得通 。


这行不通。如果它在纯xml中,但不在属性值之内,这显然可以工作。
Sebastian PR Gingter

@Sebastian PR Gingter-很奇怪,这行不通。您是否尝试过其他转义序列?
Oded

是。使用“”和\“时,无法解析整个Web.config。字符串中的”不能替换为“,并且无法解析查询字符串,从而导致所述错误。如果那是那么容易,我就不会在这里问了;-)
塞巴斯蒂安·金格尔

1
@Sebastian PR Gingter-这里的人无法猜测您尝试过什么以及您知道什么。您需要在您的问题中包括此类详细信息(如现在所述)。
Oded

您的web.config使用什么编码?
马修·阿伯特

61
connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

由于web.config是XML,因此您需要转义五个特殊字符:

&amp;-> & 符号,U + 0026-
&lt; >< 左尖括号,小于号,U + 003C-
&gt; >> 右尖括号,大于号,U + 003E-
&quot; >" 引号,U + 0022-
&apos; >' 撇号,U + 0027

我想+不是问题。


Duc Filan补充说:您还应该用单引号将密码包裹起来'

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"

对我来说,它是用&号存储在web.config中的密码。很明显,与此同时要追踪却不是很明显。web.config中出现这种情况时,Azure网站会为您提供错误-“由于发生内部服务器错误,因此无法显示该页面。” 似乎也没有向错误日志中写入任何内容。感谢OP的提问,也感谢您的提醒。
Timothy Lee Russell

方括号呢?([])
Dzianis Yafimau

;性格?
Kiquenet


1

奥德斯的答案几乎是完整的。只需添加一件事。

  1. Emanuele Greco之类的Escape xml特殊字符。
  2. 像Oded所说的那样将密码放在单引号中
  3. (这是新的),用另一个单跳号(ref)转义

具有以下密码=“';这应为有效的连接字符串:

connectionString='Server=dbsrv;User ID=myDbUser;Password='&quot;&amp;&amp;;'

我认为您的意思password='''';是正确的。但是,您的建议是唯一对我有用的方法。实际上,这也在其他转义方案中使用。
Bluebaron

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.