2017-08-29 2 views
-1

私は散発的にSQL例外を受けていますが、このコードが無効なMS SQL文を引き起こすことはありません。無効なクエリを特定します:ExecuteSqlCommand throws:SqlException(0x80131904): ')'の近くの構文が正しくありません。

jobsReadyはIQueryableを<整数>

if (jobsReady.Count() > 0 && max > 0) 
    return this.Database.ExecuteSqlCommand("UPDATE TOP(" + max + ") Jobs SET ServerID=" + serverID + ",[email protected] WHERE ServerID IS NULL AND JobID IN (" + string.Join(", ", jobsReady) + ")", 
    new SqlParameter("@UpdateTime", System.Data.SqlDbType.DateTime, 8, global::System.Data.ParameterDirection.Input, 0, 0, "UpdateTime", global::System.Data.DataRowVersion.Current, false, DateTime.Now, "", "", "")); 
return 0; 

は時々スローされます。

エラーがTimer_Elapsedで発生しました: System.Data.SqlClient.SqlException(0x80131904):付近に正しくない構文 ')'。

+0

何の最後に空のグループを参照してください... jobsReadyは空のリストを返す場合...私はクエリにランダムな値に投げてきた無効なクエリを取得します**実際の**クエリは生成されますか? – Amy

+0

単一のステートメントを複数の行に分割します。ローカル文字列変数を使用し、コマンド文字列を割り当て、 'ExecuteSqlCommand'を呼び出す前にこの文字列を詳細に調べます。デバッガ 'Console.WriteLine()'、 'MessageBox.Show()'、または任意のロギングメカニズムを使用できます。変数 'max'と' jobsReady'には常に構文エラーが発生しない値が含まれていると確信していますか? – MarkusEgle

+0

良いアイデア、最大値はintで、jobsReadyはIQueryable なので、常に整数です – Prometheus

答えて

0

あなたは、クエリ

UPDATE TOP(100) Jobs SET ServerID=100,UpdateTime='2010-01-01' WHERE ServerID IS NULL AND JobID IN() 
関連する問題