2011-08-04 4 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 구문에 오류가 있습니다 ....'(7003172) t1 LIMIT 1 'at line 2'구문을 수정하십시오. – Johan

+0

두 번째 줄이 보입니다 ... 쿼리가 완료되었습니다. 만약 내가 DB에서 전화를하면 결과를 반환한다고 생각해! :-) (100 %는 쿼리가 아님) –

답변

1

분명히 문제는 프로 시저가 모델에서 '파이프 라인'으로 표시된다는 것입니다. 이 경우 프로 시저에는 결과 집합 인 반환 값이 있다고 가정합니다. 따라서 LinqConnect 런타임은 'FirstOrDefault'메서드로 인해 'limit 1'절로 끝나는이 결과 집합에서 select를 수행하려고합니다.

MySql 함수가 결과 집합을 반환 값으로 검색 할 수 없으므로이 동작으로 인해 MySQL 오류가 발생합니다. 이 문제를 해결하려면이 프로 시저의 '파이프 라인'속성을 'false'로 설정하십시오.

+0

감사합니다. 당신의 도움으로 제 문제를 해결했지만, Devart의 마지막 버전이 이런 종류의 문제를 일으킨다는 것을 이해했습니다 :-( –