【问题标题】:Taking long time to fill data table from data adapter C#花费很长时间从数据适配器 C# 填充数据表
【发布时间】:2018-04-09 01:15:56
【问题描述】:

我已经创建了一个获取数据表的方法,这行代码花了一分钟多时间

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;
}

【问题讨论】:

  • 请更新您的帖子以包含Proc_QCArticleDetails。另请更新它以包含通常返回的记录数。
  • 呸!空 catch 和 try-catch 将字符串解析为 int,使用 int.TryParse。此外,对所有实现IDisposable 的东西都使用using 语句,例如SqlConnection
  • 发布查询。我很确定您不要在 SSMS 中执行相同的查询,即使您认为自己会这样做。例如dtFromdtoTo 看起来像日期,但具有 string 类型。您确定该字符串已正确解析吗?您是否将这些字符串与日期字段或字符串字段进行比较?如果是字符串,则您有一个严重的错误并且可能返回错误的数据。传递正确键入的参数

标签: c# sql-server ado.net


【解决方案1】:

请看下面的讨论。 Adapter.Fill takes long

根据这篇文章,由于添加参数的方法可能存在问题。 还可以按照评论中的建议使用Usingint.TryParse

【讨论】:

  • 不要发布答案来指出重复问题,而是将问题标记为重复问题。
【解决方案2】:

即使程序在秒内执行,也需要很长时间来填充数据表 (da.fill(dt)),我无法找到确切的问题,但我解决了 使用数据视图删除存储过程中的 where 条件和 C# 中的过滤数据表 最后问题为我解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2014-07-03
    • 2014-02-05
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多