显示从MySQL填充DataSet的进度

时间:2011-02-27 20:18:48

标签: c# mysql dataset progress

我目前正在使用C#和MySQL数据库后端开发应用程序。

我的程序最终可能会从数据库中加载大量数据并添加到DataGridView中显示的数据集中。我希望能够显示填充DataSet的进度,但不确定如何获取对数据库中的位置的引用。

以下是我目前的代码。

DatabaseWork dbase = new DatabaseWork();
try
{
  dbase.openConnection();
  MySqlDataAdapter myDA = new MySqlDataAdapter();
  myDA.SelectCommand = new MySqlCommand(query, dbase.conn);

  DataTable table = new DataTable();
  myDA.Fill(table);

  BindingSource bSource = new BindingSource();
  bSource.DataSource = table;

  tblDetails.DataSource = bSource;
  //tblGrid.Columns[0].Visible = false;
}
catch (MySqlException ex)
{
  dbase.displayError(ex.Message, ex.Number);
}
finally
{
  dbase.closeConnection();
}

我知道我必须将此部分代码放入像后台工作者这样的线程中,但是如何更改此代码以显示进度。

3 个答案:

答案 0 :(得分:4)

这个答案可能会有点晚,但也许有助于其他人。

在许多情况下,显示到目前为止读取的记录数就足够了。这可以通过处理DataTable.RowChanged事件来完成。从我可以验证的测试实现中,事件将触发DataAdapter.Fill-Method添加的每一行。处理事件时,您可以通过查看DataTable.Rows.Count-Property

来获取读取的数字记录

我通常做的是在后台线程中读取数据,更新标签或列表框条目。实际更新gui的方法缓冲对标签的更新,以便gui更改每秒仅发生一次以防止闪烁。

希望这有帮助。

的Sascha

答案 1 :(得分:1)

而不是

myDA.Fill(table);

...你应该能够逐行填写表格:

var dataReader = myDA.SelectCommand.ExecuteReader();
int progress = 0;
while (dataReader.Read()) {
   table.Rows.Add(dataReader);
   progress++;

   // Update progress view..
}

虽然它不像使用Fill方法那样整洁,所以我不确定你是否想这样做。当然,为了能够显示完成了多少百分比的工作,您还需要通过“选择计数”或类似的方式获取表中的行数,就像phsr指出的那样。

答案 2 :(得分:0)

我会和Stecya一起评论一个工具,将进度条作为选框进度条。

为了能够更新数据集填充的进度条,你必须事先知道你有多少条记录,然后继续做一些事情,比如包装dataAdapter以了解它放入数据集的记录数,我不完全确定你能做到。

如果绑定dataSource也需要相当长的时间,我会有一个状态消息和选框栏,并用“检索记录”更新它,然后按照“渲染记录”的方式更新。