web-dev-qa-db-ja.com

接続文字列にアンパサンドを含める方法は?

シンプルなアプリに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;に置き換えると、SqlException: Login failed for user 'myUser'.が返されます。通常、このトリックは機能しますが、これは技術的には接続文字列内の接続文字列であるため、何かが失敗していると推測しています。

ここで何をすべきですか?私のクラスのほとんどには、次のようなコードが含まれています。

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

更新:使用している資格情報はドメインアカウントであることが判明したため、本当に必要なのはパスワードではなく接続文字列のIntegrated Security=Trueです。

受け入れられた答えshouldに示されているようにアンパサンドをエンコードすることはうまくいきますが、私はテストしていません。

54
user403830

すべての.configファイルであるXMLドキュメントの場合と同様に、エスケープシーケンスを使用する必要があります。

  • アンパサンド=&= &amp;
  • より大きい=> = &gt;
  • より小さい= <= &lt;
  • アポストロフィ= '= &apos;
  • 引用= "= &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>
91
hunter