C#查询数据库显示进度条
时间: 2023-07-12 10:43:31 浏览: 54
在C#中查询数据库并显示进度条,可以使用`BackgroundWorker`控件来实现。以下是实现步骤:
1. 创建一个`BackgroundWorker`控件和进度条控件。
```c#
BackgroundWorker worker = new BackgroundWorker();
ProgressBar progressBar = new ProgressBar();
```
2. 在`DoWork`事件中编写查询数据库的代码,并在查询过程中更新进度条的值。
```c#
worker.DoWork += (sender, e) =>
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM MyTable", conn);
int count = (int)cmd.ExecuteScalar();
cmd.CommandText = "SELECT * FROM MyTable";
using (SqlDataReader reader = cmd.ExecuteReader())
{
int i = 0;
while (reader.Read())
{
// 处理查询结果
i++;
int progress = (int)((double)i / count * 100);
worker.ReportProgress(progress);
}
}
}
};
```
3. 在`ProgressChanged`事件中更新进度条的值。
```c#
worker.ProgressChanged += (sender, e) =>
{
progressBar.Value = e.ProgressPercentage;
};
```
4. 启动`BackgroundWorker`控件并显示进度条。
```c#
worker.RunWorkerAsync();
progressBar.ShowDialog();
```
完整的代码如下:
```c#
BackgroundWorker worker = new BackgroundWorker();
ProgressBar progressBar = new ProgressBar();
worker.DoWork += (sender, e) =>
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM MyTable", conn);
int count = (int)cmd.ExecuteScalar();
cmd.CommandText = "SELECT * FROM MyTable";
using (SqlDataReader reader = cmd.ExecuteReader())
{
int i = 0;
while (reader.Read())
{
// 处理查询结果
i++;
int progress = (int)((double)i / count * 100);
worker.ReportProgress(progress);
}
}
}
};
worker.ProgressChanged += (sender, e) =>
{
progressBar.Value = e.ProgressPercentage;
};
worker.RunWorkerAsync();
progressBar.ShowDialog();
```