超时时间...... IN LINQ C#

时间:2016-04-15 05:44:24

标签: c# linq

在执行我的C#控制器代码的下行时,我正在

  

超时已过期。操作完成之前经过的超时时间或服务器没有响应

我在我的c#中使用linq到sql。结果显示我的报告格式。我的记者是rdlc。

我尝试设置连接Timeout = 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();
        }
    }
}

2 个答案:

答案 0 :(得分:2)

不要通过增加来“修复”超时。解决潜在的问题!

很可能在比较它之前将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
...

如果这仍然没有帮助,您应该调查数据库表的正确索引。对于这样一个相对简单的查询,你不应该超时。

答案 1 :(得分:0)

使用 CommandTimeout 属性添加到默认超时时间为30秒:

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

如果这是一个长时间运行的任务,您可能需要考虑异步方法。

更多信息:DataContext.CommandTimeout