IT業界のすみっこ暮らし

ふと気がついたときの記録

EntityFramework:ConnectionStringsのパスワードに特殊記号が含まれる場合


下記の手順でEntityFrameworkでMySQL接続が出来ていることを前提とする

pie001.hatenablog.com

pie001.hatenablog.com

パスワードに特殊記号が含まれる場合

既存のconnectionStrings

PW:abcefg

<connectionStrings>
  <add name="WpEntities" connectionString="metadata=res://*/EntityModels.WpModel.csdl|res://*/EntityModels.WpModel.ssdl|res://*/EntityModels.WpModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=admin;password=abcefg;persistsecurityinfo=True;port=3306;database=wp01&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

上記からセキュリティ強化(?)のため、特殊記号を含めたパスワードに変更

PW:abc123efg;

<connectionStrings>
  <add name="WpEntities" connectionString="metadata=res://*/EntityModels.WpModel.csdl|res://*/EntityModels.WpModel.ssdl|res://*/EntityModels.WpModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=admin;password=abc123efg;;persistsecurityinfo=True;port=3306;database=wp01&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

connectionStringsを変更した後、実行⇒早速エラー

f:id:papamau:20171026125304p:plain

f:id:papamau:20171026131020p:plain

エラー箇所

using (var db = new WpEntities())
{
    // クエリー ★エラー!
}

using (var db = new WpEntities())では問題ないが、クエリーを実行するとエラーになってしまう。

dbの設定内容を見てみるとConnectionStringの内容が以下になっていた。

"server=localhost;user id=admin;password=abc123efg;persistsecurityinfo=True;port=3306;database=wp01"

パスワードの最後の";"が消えてる…
因みにエラーには(using password: YES)になっていてパスワードは正しいんじゃないか?と最初勘違いしたけど、エラーメッセージに「using method 'mysql_native_password' failed 」と書いているので、つまりパスワードが間違ってた(特殊記号を認識できなくて正のパスワードとして認識できなかった)のが原因。

対策

1、今回の場合

パスワード部分を'(シングルクォーテーション)で囲む

<connectionStrings>
  <add name="WpEntities" connectionString="metadata=res://*/EntityModels.WpModel.csdl|res://*/EntityModels.WpModel.ssdl|res://*/EntityModels.WpModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=admin;password='abc123efg;';persistsecurityinfo=True;port=3306;database=wp01&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

簡単すぎてちょっと虚しくなった(笑)

2、HTML特殊記号の場合

該当記号の書き方を調べたり

http://pst.co.jp/powersoft/html/index.php?f=3401pst.co.jp

HTML特殊文字変換ツールを使って正しい書き方で記入する

tech-unlimited.com

参考

stackoverflow.com



プライバシーポリシー