C# 连接到SQL Server Express 2012超时

C# 连接到SQL Server Express 2012超时,c#,linq-to-sql,exception-handling,ado.net,sql-server-express,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);

我的应用程序是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();
    }
} 
公共静态列表GetMasterView(DateTime?fromDate,DateTime?toDate) { 如果(fromDate==null)fromDate=newDateTime(1900,1,1); 如果(toDate==null)toDate=DateTime.Now; 使用(DALDataContext ctx=new DALDataContext()) { var q=ctx.vw_主视图中的c
其中c.FirstVisitDate>=fromDate&&c.LastVisitDate您可能需要在DBContext之外设置连接时间:

ctx.CommandTimeout = 200;

DataContext
类的
CommandTimeout
的默认值设置为30秒。任何需要超过30秒才能完成的数据库查询(正如您编写的,大约需要60秒)都将抛出System.Data.SqlClient.SqlException:Timeout expired异常

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

partial class DALDataContext : System.Data.Linq.DataContext
{
    partial void OnCreated()
    {
        this.CommandTimeout = 100;
    }
}

您能检查是否有打开的事务吗?sp_who()可能能够列出所有持有连接的进程。sa很少(后台和休眠),只有一个用户是可运行的。在这种情况下,我想知道DALDataContext做什么?是否可以共享实现?@SrikanthVenugopalan为什么要麻烦?这是EF ror LINQ2Sql,所以它是一个标准上下文。要了解现代数据访问,请阅读实体框架。以及查询执行计划。由于缺少索引,您可能会点击表扫描真的没有帮助(大量锁)。非常感谢tpeczek,非常好的解决方案;它运行得非常好。再次感谢。这不是答案,抱歉。30秒?这是一个疯狂的答案。这种类型的查询在加载的系统上花费30秒,就像一辆奔驰车的最高速度为40公里/小时,你告诉它是交通法规的问题。这是一个在10以下表格中的查询0百万条记录需要一位数秒的时间。@TomTom Ok,现实生活中的例子。在我的一个项目中,SQL server和Oracle之间存在链接服务器连接,由于网络组织的原因,使用此链接的查询总是需要近2分钟(应用程序也不允许直接连接Oracle服务器)-许多奇怪的现实生活情况可能会发生,因为你对奇怪的需求没有影响。问题不是优化他的查询(当然有可能这只是一个蹩脚的查询)但是正在解决超时问题。@tpeczek是的,但这是您最后更改的一件事。您首先查看查询计划。所有这些都没有发生。所有这些只是“嘿,改进超时,谁他妈的关心检查问题是什么?”.@TomTom我不想和你争论答案应该朝哪个方向发展。没有人禁止你提供另一个答案来解释他应该如何进行查询优化。目前还没有关于他的观点实际是什么以及查询是否需要超过30秒的信息——这就是这不是他的问题。不,他没有。“快一点机器”和“等等”此处的答案无效。除非他有大量数据,否则此查询不应花费30秒的时间开始。@TomTom不考虑他所处的环境,我们正在回答问题。不,你没有。当你第一次解决问题时,你给出了一个不好的建议。你只是碰巧作为外包商工作?不管质量如何,这都是可行的那么我们得到报酬了?