将一定数量的行从DataReader加载到datatable中

时间:2015-01-19 17:11:05

标签: c# tsql datagridview

我有一个从TSql视图加载DataGridView的进程。我的用户之间一直在争论是否要返回所有行或一定数量(后一阵营中的im:TOP 100)。我决定最好的方法是根据用户设置的字段动态返回行数。我期待这是一个相当微不足道的任务。我期望加载带有while循环和读取函数的数据表,并停在一定数量的行。这可能吗?保存下面的代码是否有很大的好处,但是将数据表(dt)减少到所需的行数,然后从那里加载datagridview?

         public void Load_DGV(DataGridView dgv, string sqlx)
    {
        DateTime d1 = DateTime.Now;
        SqlCommand command = new SqlCommand(sqlx.ToString());

        SqlConnection connection = new SqlConnection(Properties.Settings.Default._CONNSTRING);
        command.Connection = connection;

        bool Success = true;
        DataTable dt = new DataTable();
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
       dt.Load(command.ExecuteReader());

        connection.Close();

        dgv.DataSource = null;
        dgv.DataSource = dt;
        Color_DGV(dgvProposal);

        dgvProposal.Sort(dgvProposal.Columns[m_Current_Menu_Item.OrderByCol], ListSortDirection.Descending);
        DateTime d2 = DateTime.Now;
        Console.WriteLine("Execution of " + sqlx + " took " + (d2 - d1).Seconds.ToString() + "s. ");
    }

1 个答案:

答案 0 :(得分:1)

如果你改变了,你将获得更好的性能,这样你就可以传递一个参数来指示要返回的TOP行的数量。

否则,一旦将所有记录加载到新的DataTable,就可以使用LINQ到TAKE第一行xx行,并将其分配给DataSource

dataGridView1.DataSource = dt.Rows.Cast<DataRow>().Take(100).CopyToDataTable();

如果您使用reader.Read()来迭代前100条记录,并手动填充DataTable,则可以节省一些处理时间。至少那时你没有填充DataTable有数千条记录只是为了丢弃它并创建另一个,更小DataTable