1

こんにちは、Devart を使用してこの種の例外があります。MySql でストア プロシージャを呼び出しています。DBで呼び出す場合のストアプロシージャ関数。

    using (dc = conn.GetContext())
    {
       result = dc.StoreProcedure(pId).FirstOrDefault();
    }
 return result;

[MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(7003172) t1 LIMIT 1' at line 2]
Devart.Data.MySql.bk.s() +270
Devart.Data.MySql.bk.d() +200
Devart.Data.MySql.v.a(ah[]& A_0, Int32& A_1) +134
Devart.Data.MySql.v.a(Byte[] A_0, Int32 A_1, Boolean A_2) +106
Devart.Data.MySql.a3.e() +169
Devart.Data.MySql.a3.o() +89
Devart.Data.MySql.MySqlCommand.InternalExecute(CommandBehavior behavior, IDisposable stmt, Int32 startRecord, Int32 maxRecords) +1472
Devart.Common.DbCommandBase.InternalExecute(CommandBehavior behavior, IDisposable stmt, Int32 startRecord, Int32 maxRecords, Boolean nonQuery) +48
Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior, Boolean nonQuery) +764
Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior) +38
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() +12
Devart.Data.Linq.Provider.DataProvider.a(b A_0, Object[] A_1, Object[] A_2, Object A_3) +1436
[LinqCommandExecutionException: Error on executing DbCommand.]
Devart.Data.Linq.LinqCommandExecutionException.a(String A_0, Exception A_1) +79
Devart.Data.Linq.Provider.DataProvider.a(b A_0, Object[] A_1, Object[] A_2, Object A_3) +5349
Devart.Data.Linq.Provider.DataProvider.a(b A_0, Object[] A_1) +65
Devart.Data.Linq.Provider.DataProvider.h(Expression A_0) +189
Devart.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) +53
System.Linq.Queryable.FirstOrDefault(IQueryable`1 source) +269`
4

1 に答える 1

2

どうやら問題は、プロシージャがモデルで「パイプライン処理済み」としてマークされていることです。この場合、プロシージャは結果セットである戻り値を持つと想定されます。したがって、LinqConnect ランタイムは、この結果セットから選択を実行しようとします ('FirstOrDefault' メソッドにより、'limit 1' 句で終了します)。

MySql 関数は結果セットを戻り値として取得できないため、この動作は MySQL エラーにつながります。この問題を解決するには、このプロシージャの「Pipelined」プロパティを「false」に設定してみてください。

于 2011-08-05T08:31:20.700 に答える