2010-03-22 36 views
0

我正在执行一个来自C#代码的SQL存储过程,但它根本没有响应。没有异常或错误产生。处理过程犹如挂起。存储过程由多个更新语句和一个select语句组成。存储过程独立运行,需要大约3-5分钟才能执行,而从C#代码调用时,即使在20分钟或更长时间后,它也不响应。当我评论大多数更新陈述时,只有一个或两个执行查询能够运行。我甚至增加了commandTimeout时间。executenonquery调用参数化存储过程没有响应

请建议,因为这是紧急的事情。请看以下的C#代码:

C#功能:

private void PanDatabase(DateTime StartDate, DateTime EndDate) 
    { 
     SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connectionString"]); 

     SqlCommand cmd = new SqlCommand("PanData", conn); 

     cmd.CommandType = System.Data.CommandType.StoredProcedure; 

     cmd.Parameters.Add(new SqlParameter("@start_date", StartDate.ToShortDateString())); 
     cmd.Parameters.Add(new SqlParameter("@end_date", EndDate.ToShortDateString())); 
     cmd.Parameters.Add(new SqlParameter("@period_status", _periodPan)); 

     conn.Open(); 

     cmd.CommandTimeout = 9000; 

     cmd.ExecuteNonQuery(); 

     cmd.Dispose(); 
     conn.Close(); 
     conn.Dispose(); 
    } 
+4

从Web服务器访问3-5分钟的查询?这有困难写在它上面。 :/ – 2010-03-22 13:44:28

回答

1

通过.NET代码是在序列化事务中运行默认。这可能会导致一些锁定?在单个存储过程中,我不认为这是一个问题,但是如果您从.Net调用多个数据库查询,那么它们可能会相互干扰。

您可以通过查看DB Manager“活动监视器”*中的作业状态来验证锁定。正如马丁所言,应该使用SQL Profiler进行更详细的诊断。 (*仅当您拥有足够的数据库权限时)。

通过向.Net代码添加一些System.Diagnostics.Trace语句来检查对同一个Stored Proc的多个调用。

0

答案很简单,就是加...

cmd.Parameters.Clear(); 

...添加新的参数,并再次调用ExecuteNonQuery()之前。

相关问题