2017-10-27 15 views
-1

からデータテーブルを埋めるために長い時間を取って、それは、コードと私はデータテーブルを取得する方法を作成したデータアダプタのC#

da.Fill(dt) 

が、SQL Serverでのこの行の分以上を取っていました同じパラメータを使用すると、手順は1秒後に実行されます。

protected DataTable RetrieveDataTable(string staffId, string 
    DtFrom, string DtTo, string Stm, string JrId,int ActiveFlag) 
{ 
    dt = new DataTable(); 

    SqlConnection Conn = new SqlConnection(ConfigurationManager.AppSettings["Conn"]); 
    Conn.Open(); 

    SqlCommand cmd = new SqlCommand(); 
    SqlDataAdapter da = new SqlDataAdapter(); 

    try 
    { 
     cmd = new SqlCommand("Proc_QCArticleDetails", Conn); 
     cmd.Parameters.Add(new SqlParameter("@StaffId", staffId)); 
     cmd.Parameters.Add(new SqlParameter("@FrmDt", DtFrom)); 
     cmd.Parameters.Add(new SqlParameter("@ToDt", DtTo)); 
     cmd.Parameters.Add(new SqlParameter("@ActiveFlag", ActiveFlag)); 

     try 
     { 
      int jrid = Convert.ToInt32(JrId); 
      cmd.Parameters.Add(new SqlParameter("@journalId", JrId)); 
     } 
     catch (Exception) 
     { 
     } 

     cmd.Parameters.Add(new SqlParameter("@Statement", Stm)); 
     cmd.CommandTimeout = 250; 
     cmd.CommandType = CommandType.StoredProcedure; 

     da.SelectCommand = cmd; 
     da.Fill(dt);  // taking a long time to run here 
    } 
    catch (Exception x) 
    { 
     MessageBox.Show(x.ToString()); 
    } 
    finally 
    { 
     cmd.Dispose(); 
     Conn.Close(); 
    } 

    return dt; 
} 
+1

'Proc_QCArticleDetails'を含むようにあなたの投稿を更新してください。また、通常は返されるレコード数を含めるように更新してください。 – mjwills

+5

Yuck!文字列をintに解析するためにキャッチとtry-catchを空にするには、 'int.TryParse'を使います。また、 'SqlConnection'のように' IDisposable'を実装するすべてのものに対して 'using'ステートメントを使用してください。 –

+0

質問を投稿してください。 SSMSで同じクエリを実行しないと確信しています。例えば、 'dtFrom'、' dtoTo'は日付のように見えますが、* string *型です。文字列が正しく解析されていますか?それらの文字列を日付フィールドまたは文字列フィールドと比較していますか?文字列の場合、重大なバグがあり、間違ったデータを返す可能性があります。 *適切に型付けされたパラメータを渡す*。 –

答えて

0

以下の説明をご覧ください。 Adapter.Fill takes long

この投稿によると、パラメータを追加する方法のために問題が発生する可能性があります。 また、Usingint.TryParseをコメント内の示唆通りに使用してください。

+0

重複を指摘する回答を投稿しないで、重複として質問にフラグを立てます。 –

0

プロシージャを実行してもデータテーブル(da.fill(dt))を埋めるのに時間がかかりますが、正確な問題は見つかりませんでしたが、 によって解決されました。 C#でデータビューを使用最後に問題が解決されました。

関連する問題