web-dev-qa-db-ja.com

web.config接続文字列で引用符をエスケープします

Web設定に接続文字列があります:

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

ご覧のとおり、パスワードには引用符( ")があります(他の部署から与えられました。このdbユーザーのパスワードは変更できません)。

この接続文字列の引用符をエスケープするにはどうすればよいですか?

ところで:私はすでに試してみました&quot;文字列で。それは機能しませんでした-ado.netはArgumenExceptionを受け取りました:「初期化文字列のフォーマットは、インデックス57から始まる仕様に準拠していません。」 57は&quot;です。接続文字列にあります。また、パスワード部分を 'で囲みました-動作しませんでした。

また、「」と「」を試してみました-web.configは解析できません。

解決策をありがとう:

二重引用符のエスケープとパスワードを単一引用符で囲むことを組み合わせる必要がありました。

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

エスケープするには、&quot;の代わりに"を使用します。

web.configはXMLファイルなので、XMLエスケープを使用する必要があります。

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

this フォーラムスレッドを参照してください。

更新

&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ではなく、接続文字列の形式にあります。接続文字列で、(キーと値のペアの)値に"がある場合、値を'で囲む必要があります。したがって、Password=somepass"Wordは機能しませんが、Password='somepass"Word'は機能します。

97
Oded
connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;Word"

Web.configはXMLであるため、5つの特殊文字をエスケープする必要があります。

&amp;-> &アンパサンド、U + 0026
&lt;-> <左山括弧、小なり記号、U + 003C
&gt;-> >右山括弧、大なり記号、U + 003E
&quot;-> "引用符、U + 0022
&apos;-> 'アポストロフィ、U + 0027

+は問題ではないと思います。

50
Emanuele Greco

if &quot;</ code> 動作していない場合は、&#34;</ code> 代わりに。

2
Earl

Odedsの回答はほぼ完了です。 1つ追加するだけです。

  1. Emanuele Grecoのようなxmlの特殊文字をエスケープします。
  2. Odedが言ったように、パスワードを一重引用符で囲んでください
  3. (これは新しい)単一のティックを別の単一のティックでエスケープする( ref

このpassword = "'を使用すると、有効な接続文字列になります。

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

つかいます &quot;それはうまくいくはずです。

0
spinon