使用数据适配器填充数据表需要很长时间(C#)

3
我已经创建了一个获取datatable的方法,但是这行代码执行时间超过了一分钟。
da.Fill(dt)

但是在SQL Server中,使用相同的参数,存储过程将在一秒钟内执行:

protected DataTable RetrieveDataTable(string staffId, string 
    DtFrom, string DtTo, string Stm, string JrId,int ActiveFlag)
{
    dt = new DataTable();

    SqlConnection Conn = new SqlConnection(ConfigurationManager.AppSettings["Conn"]);
    Conn.Open();

    SqlCommand cmd = new SqlCommand();
    SqlDataAdapter da = new SqlDataAdapter();

    try
    {
        cmd = new SqlCommand("Proc_QCArticleDetails", Conn);
        cmd.Parameters.Add(new SqlParameter("@StaffId", staffId));
        cmd.Parameters.Add(new SqlParameter("@FrmDt", DtFrom));
        cmd.Parameters.Add(new SqlParameter("@ToDt", DtTo));
        cmd.Parameters.Add(new SqlParameter("@ActiveFlag", ActiveFlag));

        try
        {
            int jrid = Convert.ToInt32(JrId);
            cmd.Parameters.Add(new SqlParameter("@journalId", JrId));
        }
        catch (Exception)
        {
        }

        cmd.Parameters.Add(new SqlParameter("@Statement", Stm));
        cmd.CommandTimeout = 250;
        cmd.CommandType = CommandType.StoredProcedure;

        da.SelectCommand = cmd;
        da.Fill(dt);     // taking a long time to run here
    }
    catch (Exception x)
    {
        MessageBox.Show(x.ToString());
    }
    finally
    {
        cmd.Dispose();
        Conn.Close();
    }

    return dt;
}

1
请更新您的帖子,包括 Proc_QCArticleDetails。另外,请更新它以包括通常返回多少条记录。 - mjwills
5
呸!空的catch和try-catch用于将字符串解析为整数,应使用int.TryParse。对于实现IDisposable的所有内容(例如SqlConnection),请使用“using”语句。 - Tim Schmelter
发布查询。我非常确定即使您认为自己执行相同的查询,也不会在SSMS中执行相同的查询。例如,dtFromdtoTo看起来像日期,但是它们是字符串类型。您确定字符串被正确解析了吗?您是否将这些字符串与日期字段或字符串字段进行比较?如果是字符串,则存在严重的错误,并且可能返回错误的数据。传递正确类型的参数 - Panagiotis Kanavos
2个回答

0
请看下面的讨论。 Adapter.Fill需要很长时间 根据这篇文章,可能存在添加参数的方法问题。 还要按照评论中建议的使用 Usingint.TryParse

请不要回答以指出重复问题,而是应将该问题标记为重复。 - Scott Chamberlain

0

尽管存储过程在一秒钟内执行,但填充数据表(da.fill(dt))需要很长时间,我无法找到确切的问题,但是我通过在存储过程中删除where条件并使用数据视图在C#中过滤数据表来解决了这个问题。最终问题得到了解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接