0

Entity Framework 5.0 に問題があります。Silverlight 5 と MySQL 5.6 も使用しています。

MySQL サーバーに接続する前に、環境 MySQL 変数を設定する必要があります。

例えば

SET @my_var = 'テスト';

Mysql では問題はありません。

次の例では、EntityFrameworkException ('@' 付近の構文エラー) が発生します。

this.ObjectContext.CreateQuery<object>(" SET @my_var = 'test' ");

また

this.ObjectContext.CreateQuery<object>(" CALL set_my_var('test') ");

この最後のメソッドは、DataReader が既に開いており、閉じる必要があることを示す MySQLException を発生させます。

this.ObjectContext.ExecuteStoreQuery<object>(" CALL set_my_var('test') ", null);

また、毎回同じ結果でMySQLシステム環境(「@」なし)を設定しようとしました。

どんな助けでも大歓迎です!ありがとうございました。

4

2 に答える 2

2

コード内の変数のスペルを間違えたほど多くのことを試しました。したがって、次のように最終的に機能しました。ctx.ExecuteStoreCommand("SET @my_var = 'test'");

Initializeドメイン サービスのメソッドに命令を残すことにしました。このメソッドはLinqToEntitiesDomainServiceクラスから継承されます。

Allow User Variables=Trueただし、MySQL 接続文字列を設定する必要があります (ref : Is it possible to use a MySql User Defined Variable in a .NET MySqlCommand? ) 。

古いバージョンでは「@」マークを使用して SQL パラメータを定義しているため、カスタム変数と競合する可能性があるため、最新バージョンの MySQL コネクタを使用する必要があります。現在は「?」を使用しています。マーク: http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqlcommand.html

私のライブラリはすでに最新 (6.6.5) でした。

お手伝いありがとう !

于 2013-04-03T09:52:41.630 に答える
0

ステートメントはクエリではない (つまり、結果を返さない) ため、 を使用する必要がありますExecuteStoreCommand。このようなものが動作するはずです:

ctx.ExecuteStoreCommand("SET @my_var = 'test'")
于 2013-04-02T17:50:06.700 に答える