我正在从c#代码执行SQL存储过程,但它根本没有响应。没有异常或错误生成。处理好像被挂起了。存储过程由多个更新语句和一个select语句组成。存储过程独立运行良好,执行大约需要3-5分钟,而从C#代码调用时,即使在20分钟或更长时间后也没有响应。当我评论大多数更新语句时,只运行一个或两个执行查询。我甚至增加了commandTimeout时间。
请建议,因为这是紧急事情。请在下面找到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();
}
答案 0 :(得分:1)
默认情况下,您的.Net代码在Serializable事务中运行。这会导致一些锁定吗?在单个存储过程中,我不认为这是一个问题,但如果您从.Net调用多个数据库查询,那么它们可能会相互干扰。
您可以通过查看数据库管理器“活动监视器”*中的作业状态来验证锁定。正如Martin所说,SQL Profiler应该可以进行更详细的诊断。 (*仅当您有足够的数据库权限时。)
通过向.Net代码添加一些System.Diagnostics.Trace语句来检查对同一存储过程的多次调用。
答案 1 :(得分:0)
简单的答案是添加......
cmd.Parameters.Clear();
...在添加新参数并再次调用ExecuteNonQuery()
之前。