2016-04-15 6 views
0

私はタイムアウトの期限が切れLINQ C#でのタイムアウト時間...

なっていた私のC#のコントローラコードのダウンラインを実行中。私はC#でLINQ to SQLのを使用.AND私のレポートform.myレポーターがRDLCであることを示す結果とタイムアウト期間が操作が完了する前に経過するか、サーバが

に応答していません。

接続のタイムアウトを0に設定してみました。また、私は同じエラーが発生します。

どうすれば解決できますか?
私を助けてください...ありがとう。

private void bt10_Click(object sender, EventArgs e) 
{ 
    { 
     Form3 frm3 = new Form3(); 
     DataSet ds = new DataSet(); 

     var DB = new DataClasses3DataContext(); 
     var c1 = (from c in DB.A 
        join r in DB.A1 
        on c.DATE equals r.DATE 
        where c.B.Equals(int.Parse(txtSearch.Text)) 
         && (string.Compare(c.DATE.ToString(), txtEdate.Text) <= 0 
         && string.Compare(c.DATE.ToString(), txtFdate.Text) >= 0) 
         && (c.NO == r.NO) 
         && (c.K == 10) 
         && (c.A == 1) 
         && (r.A == 2) 
         && r.K != 10 
        select c).ToList();  

     dataGridView1.DataSource = c1; 
     DataSet2.ADataTable dt = new DataSet2.ADataTable(); 

     foreach (A item in c1) 
     { 
      dt.Rows.Add(item.B, item.DATE, item.NO, item.K); 
     } 

     if (c1 == null) 
     { 
      MessageBox.Show("null"); 
     } 
     else 
     { 
      ds.Tables.Add(dt); 
      ReportDataSource rds = new ReportDataSource(); 
      frm3.reportViewer1.LocalReport.DataSources.Clear(); 
      rds.Name = "DataSet3"; 
      rds.Value = dt; 
      frm3.reportViewer1.LocalReport.DataSources.Add(rds); 
      frm3.reportViewer1.LocalReport.ReportEmbeddedResource = "P10.Report5.rdlc"; 
      frm3.ShowDialog(); 
     } 
    } 
} 
+1

DB.CommandTimeout = 60; // seconds [LINQ to SQLのタイムアウトに関するこの質問を参照](http://stackoverflow.com/a/8970112/45852) – kwcto

答えて

0

使用CommandTimeoutの30秒であるデフォルト時間に出て追加プロパティ:

DB.CommandTimeout = 1 * 60; // Adds 1 Minute to the time out, so 1:30 minutes now 

これは長時間実行するタスクの場合は、非同期方式を検討する必要がある場合があります。詳細については

2

DataContext.CommandTimeoutはそれらを増やすことでタイムアウトを "修正" しないでください。根本的な問題を修正してください!

比較する前にc.DATEを文字列に変換すると、問題が発生する可能性があります。これにより、表現が不可能になります。つまり、DATEのインデックスは無効になります。最初にtxtEdate.TexttxtFdate.Textを解析し、比較で解析された値を使用してこれを変更する必要があります(最初にtxtSearchも解析してください)。

var edate = DateTime.Parse(txtEdate.Text); 
var fdate = DateTime.Parse(txtFdate.Text); 
var searchInt = int.Parse(txtSearch.Text); 

... 
where c.B == searchInt 
    && c.DATE <= edate 
    && c.DATE >= fdate 
... 

これでも解決しない場合は、データベーステーブルで適切なインデックスを調べる必要があります。このような比較的簡単なクエリでは、タイムアウトを取得しないでください。

関連する問題