0

我的应用程序是 asp.net MVC3,我使用的是 SQLExpress 2012。我收到以下错误

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

当我尝试运行以下命令时:

public static List<vw_MasterView> GetMasterView(DateTime? fromDate, DateTime? toDate)
{
    if (fromDate == null) fromDate = new DateTime(1900, 1, 1);
    if (toDate == null) toDate = DateTime.Now;
    using (DALDataContext ctx = new DALDataContext())
    {
        var q = from c in ctx.vw_MasterViews
                where c.FirstVisitDate >= fromDate && c.LastVisitDate <= toDate
                select c;
        return q.ToList();
    }
} 

我确实将连接时间(服务器/高级属性)增加到 6000。

当我从设计器(在 SQL Server 中)运行视图时,我收到相同的错误消息,但是当我运行查询(在 SQL Server 中)时,它工作正常,执行需要 54 秒。

我会很感激你的建议,在此先感谢。

4

2 回答 2

0

您可能需要设置 DBContext 的连接超时:

ctx.CommandTimeout = 200;
于 2013-01-17T07:38:25.033 回答
-1

DataContext类的默认值CommandTimeout设置为 30 秒。完成时间超过 30 秒的任何数据库查询(正如您所写的大约需要 60 秒)将引发System.Data.SqlClient.SqlException: Timeout expired Exception

如果您查看自动生成的DALDataContext子类,您将看到一些部分方法声明,您的兴趣点应该是OnCreated方法。您可以OnCreated在另一个与自动生成的类全名相同的部分类中定义方法的主体,并通过以下方式在那里设置所需的超时值:

partial class DALDataContext : System.Data.Linq.DataContext
{
    partial void OnCreated()
    {
        this.CommandTimeout = 100;
    }
}
于 2013-01-17T07:38:54.570 回答