EntityFramework:ConnectionStringsのパスワードに特殊記号が含まれる場合
下記の手順でEntityFrameworkでMySQL接続が出来ていることを前提とする
パスワードに特殊記号が含まれる場合
既存の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="server=localhost;user id=admin;password=abcefg;persistsecurityinfo=True;port=3306;database=wp01"" 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="server=localhost;user id=admin;password=abc123efg;;persistsecurityinfo=True;port=3306;database=wp01"" providerName="System.Data.EntityClient" /> </connectionStrings>
connectionStringsを変更した後、実行⇒早速エラー
エラー箇所
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="server=localhost;user id=admin;password='abc123efg;';persistsecurityinfo=True;port=3306;database=wp01"" providerName="System.Data.EntityClient" /> </connectionStrings>
簡単すぎてちょっと虚しくなった(笑)
2、HTML特殊記号の場合
該当記号の書き方を調べたり
http://pst.co.jp/powersoft/html/index.php?f=3401pst.co.jp
HTML特殊文字変換ツールを使って正しい書き方で記入する