在执行我的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();
}
}
}
答案 0 :(得分:2)
不要通过增加来“修复”超时。解决潜在的问题!
很可能在比较它之前将c.DATE
转换为字符串会导致问题。这使得表达式不可搜索,即DATE
上的任何索引都被禁用。您应该首先解析txtEdate.Text
和txtFdate.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
如果这是一个长时间运行的任务,您可能需要考虑异步方法。