0

我的应用程序是asp.net MVC3中,我使用的SQLExpress 2012年我收到以下错误超时连接到SQL Server Express 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秒执行。

我希望你的建议,在此先感谢。

+1

您可以检查是否存在打开交易? sp_who(http://msdn.microsoft.com/en-us/library/ms174313.aspx)可能能够列出持有连接的所有进程。 –

+0

有几个sa(背景和睡眠),只有一个用户可以运行。 – hncl

+0

在这种情况下,我想知道DALDataContext的作用是什么?是否有可能分享实施? –

回答

-1

DataContext类的CommandTimeout的默认值设置为30秒。任何数据库查询需要花费较长的时间才能完成超过30秒(并且正如您所写的,大约需要60秒)将会抛出一个System.Data.SqlClient.SqlException:超时过期异常

如果你看一下自动生成的DALDataContext子类,你会有几个部分方法声明,你的兴趣点应该是OnCreated方法。你可以用相同的全名定义OnCreated方法的主体在另一个部分类为自动生成的类,并以下列方式设置所需的超时值有:

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

非常感谢tpeczek,优秀的解决方案;它工作得很好。再次感谢。 – hncl

+0

这不是一个答案,对不起。 30秒?这是NUTS作为答案。这种在装载系统上花费30秒的查询就像是一辆奔驰车,最高时速为40公里/小时,并且你知道这是交通法的问题。这是一个查询,在一个低于1亿条记录的表中,应该采用单位数字秒。 – TomTom

+0

@TomTom好的,现实生活中的例子。在我的其中一个项目中,SQL Server和Oracle之间存在链接的服务器连接,并且由于网络组织的原因,使用此链接的问号总是需要将近2分钟(应用程序也不允许直接连接Oracle服务器) - 许多奇怪的现实生活由于您没有影响的奇怪要求可能会发生情况。问题不在于优化他的查询(当然,这可能只是一个糟糕的查询),但解决了超时问题。 – tpeczek

0

您可能需要设置timout你的DbContext的连接:

ctx.CommandTimeout = 200; 
+0

不,他没有。 “获得更快的机器”和“等待”在这里不是有效的答案。除非他有TONS数据,否则这个查询不需要30秒。 – TomTom

+0

@TomTom无视他正在研究的背景,我们**回答** – noobob

+0

不,你不知道。当你第一次指出问题时,你会提出一个坏建议。你只是偶然的工作作为外包?不管怎样,不管怎样,它都可以工作,所以我们可以得到报酬? – TomTom