2013-07-05 94 views
2

我有个问题:如何在asp.net MVC页面中处理操作超时。加载正在查询数据库SQL Server的页面时,会加载产品。有时它说等待操作超时。如何处理它。等待操作超时mvc

+0

回顾你的代码。检查你的SQL查询,这得花多少CPU服用和资源.. –

回答

4

为了避免在运行非常长的查询时发生等待操作超时异常,请更改SQL命令属性并允许该命令在调用超时之前等待较长时间。

using System; 
using System.Data.SqlClient; 
/// 
public class A { 
    /// 
    public static void Main() { 
    string connectionString = ""; 
    // Wait for 5 second delay in the command 
    string queryString = "waitfor delay '00:00:05'"; 
    using (SqlConnection connection = new SqlConnection(connectionString)) { 
     connection.Open(); 
     SqlCommand command = new SqlCommand(queryString, connection); 
     // Setting command timeout to 1 second 
     command.CommandTimeout = 1; 
      try { 
       command.ExecuteNonQuery(); 
       } 
      catch (SqlException e) { 
       Console.WriteLine("Got expected SqlException due to command timeout "); 
       Console.WriteLine(e); 
     } 
    } 
} 

}

的LINQ的执行到SQL查询可能需要更长的时间&超过DataContext类的CommandTimeout属性的默认值。 默认值是30秒。 我们可以在每次创建LINQ to SQL DataContext对象并调用查询之前设置CommandTimeout的值。

#region Constructors 

    /// <summary> 
    /// Initializes a new FrameworkEntities object using the connection string found in the 'FrameworkEntities' section of the application configuration file. 
    /// </summary> 
    public FrameworkEntities() : base("name=FrameworkEntities", "FrameworkEntities") 
    { 
     this.ContextOptions.LazyLoadingEnabled = true; 
     this.CommandTimeout = 300; 
     OnContextCreated(); 
    } 

    /// <summary> 
    /// Initialize a new FrameworkEntities object. 
    /// </summary> 
    public FrameworkEntities(string connectionString) : base(connectionString, "FrameworkEntities") 
    { 
     this.ContextOptions.LazyLoadingEnabled = true; 
     this.CommandTimeout = 300; 
     OnContextCreated(); 
    } 

    /// <summary> 
    /// Initialize a new FrameworkEntities object. 
    /// </summary> 
    public FrameworkEntities(EntityConnection connection) : base(connection, "FrameworkEntities") 
    { 
     this.ContextOptions.LazyLoadingEnabled = true; 
     this.CommandTimeout = 300; 
     OnContextCreated(); 
    } 

    #endregion 
+0

'command.CommandTimeout = 0;'将会是无限的? –

+0

零是无限超时。 当来自SQL SERVER实例的响应被分解为多个网络数据包时,连接将错误地结合,并且会发生一般网络错误。 – AnandMohanAwasthi

+0

我无法在任何地方找到此类文档。谢谢。 –