2011-08-04 2 views
1

こんにちは、この種の例外はDevartを使用しています。私はMySqlでストアプロシージャを呼び出しています。ストアプロシージャ関数は、私はそれをDBで呼び出す場合。Devart "DbCommand実行時のエラー"

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` 
+0

これは、「あなたはSQL構文.... nearに誤りがあります。」(7003172)t1 LIMIT 1 'at line 2'構文を修正しました。 – Johan

+0

これは2番目の行です...クエリの完了はOKです。もしあなたがDBから呼び出して結果を返すと思ったら? :-)(私は100%の質問はないと確信しています) –

答えて

1

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

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

+0

ありがとう!あなたの助けを借りて私の問題を解決しましたが、私はDevartの最新バージョンがこの種の問題を作り出していることを理解しています。:-( –