花费很长时间从数据适配器C#填充数据表

时间:2017-10-27 12:22:57

标签: c# sql-server ado.net

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

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

2 个答案:

答案 0 :(得分:0)

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

根据这篇文章,由于添加参数的方法可能会有问题。 另请使用评论中建议的Usingint.TryParse

答案 1 :(得分:0)

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