超时连接到SQL Server Express 2012

时间:2013-01-17 07:25:05

标签: c# linq-to-sql exception-handling ado.net sql-server-express

我的应用程序是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服务器中)它工作正常时,需要54秒才能执行。

我很感激你的建议,谢谢你。

2 个答案:

答案 0 :(得分:0)

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

ctx.CommandTimeout = 200;

答案 1 :(得分:-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;
    }
}