【问题标题】:c# - fastest way to insert value from DataReader into DataGridViewc# - 将值从 DataReader 插入 DataGridView 的最快方法
【发布时间】:2016-09-09 23:08:39
【问题描述】:

我需要从 SQLite 加载数据,然后在 DataTable 中显示数据以显示在 DataGridView 中。我正在使用的当前方法是从 DataReader 读取数据,然后循环通过 reader.Read() 来创建每个 DataRow。

上述方法的性能很慢,因为我有 600k 行数据行。我曾尝试使用 dataTable.Load(reader),但它甚至比以前慢。有没有最快的方法将 SQLite 中的数据添加到 DataTable 中。

SQLiteCommand command = new SQLiteCommand(sql, connection);
SQLiteDataReader reader = command.ExecuteReader();
while(reader.Read())
{
  DataRow dRow = dataTable.NewRow();
  dRow[''] = reader[''].ToString();
  ......
  ......
  ......
  dataTable.Rows.Add(dRow);
}

【问题讨论】:

  • 你的谷歌搜索结果告诉你什么?
  • 到目前为止 google 告诉我使用 dataTable.Load(reader),但正如我提到的它比以前慢
  • 如果您尝试加载过多信息,请尝试在存储过程中使用分页并仅从数据库中获取所需的行数
  • 我知道 600k 行太多了,我认为客户端无法查看所有行。我希望进行分页,但客户更喜欢在一页中显示所有数据。原因很简单,因为他们的旧系统显示所有内容而且速度非常快。
  • @Paparazzi:WinForms 与 OP 的问题无关。正是那些 600K 记录使他的应用程序变慢了,它在 WPF 中也会做同样的事情。如果您建议 WPF 进行分页,也可以在 WinForms 中完成。

标签: c# sql sqlite datagridview datatable


【解决方案1】:

这只是一个您可能不关心的选项。

您现在所做的是,将 600,000 个值逐一输入到行(数据表)的每一列中,如果新行的列完全插入,则将新行添加到数据表中。

读取循环中的代码似乎只是构造一个新行并将其添加到 dataTable。

如果您在读取循环时不需要操作每个值,这意味着您只需要数据,

SQLiteCommand command = new SQLiteCommand(sql, connection);
SqlDataAdapter da = new SqlDataAdapter(commmand);

da.Fill(dataTable);
dataGridView.ItemsSource= dt.DefaultView;

【讨论】:

  • 为什么要在上面创建Adapter?适配器应该替换低级读取器循环。如果你确实使用了Adapter.Fill(),你应该从上面的代码中删除reader 对象以及循环。
  • 也许我不够清楚。我的意思是你要么使用DataAdapter,要么使用SqlCommand + SqlDataReader。你不要同时使用它们。
  • @dotNET,我认为 OP 可能希望在阅读时进行一些操作。我知道,但是,当然,我感谢您的宝贵建议。
猜你喜欢
  • 2016-04-20
  • 1970-01-01
  • 2016-08-12
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多