executetenonquery调用参数化存储过程没有响应

时间:2010-03-22 13:42:08

标签: c# .net stored-procedures

我正在从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();
    }

2 个答案:

答案 0 :(得分:1)

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

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

通过向.Net代码添加一些System.Diagnostics.Trace语句来检查对同一存储过程的多次调用。

答案 1 :(得分:0)

简单的答案是添加......

cmd.Parameters.Clear();

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