C#分层执行SQL时显示进度条
时间: 2023-07-12 14:43:33 浏览: 153
要在 C# 中使用分层架构执行 SQL 并显示进度条,可以使用 BackgroundWorker 控件和 DataReader 对象来实现。以下是一个示例代码,可以查询数据库中的数据并显示进度条:
首先,我们需要创建一个数据访问层(DAL),用于执行 SQL 查询和更新。在 DAL 中,我们可以使用 DataReader 对象来查询数据,并将查询结果返回给业务逻辑层(BLL)。
在业务逻辑层中,我们可以使用 BackgroundWorker 控件来执行 DAL 中的查询,并显示进度条。在查询过程中,我们可以使用 ReportProgress 方法更新进度条。
在界面层(UI)中,我们可以创建一个 BackgroundWorker 控件和一个 ProgressBar 控件。当用户单击查询按钮时,我们可以使用 BackgroundWorker 控件来执行查询,并在 ProgressBar 控件中显示进度条。
以下是一个示例代码,可以帮助你更好地理解这个过程:
DAL 层:
```csharp
public class DataAccess
{
public SqlDataReader ExecuteReader(string connectionString, string sql)
{
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(sql, connection);
connection.Open();
return command.ExecuteReader(CommandBehavior.CloseConnection);
}
}
```
BLL 层:
```csharp
public class BusinessLogic
{
private DataAccess dataAccess = new DataAccess();
public void QueryData(string connectionString, string sql, BackgroundWorker worker, DoWorkEventArgs e)
{
SqlDataReader reader = dataAccess.ExecuteReader(connectionString, sql);
int count = 0;
while (reader.Read())
{
count++;
}
reader.Close();
reader = dataAccess.ExecuteReader(connectionString, sql);
int i = 0;
while (reader.Read())
{
// 处理数据
i++;
int progress = (int)((float)i / (float)count * 100);
worker.ReportProgress(progress);
if (worker.CancellationPending)
{
e.Cancel = true;
break;
}
}
reader.Close();
}
}
```
UI 层:
```csharp
public partial class Form1 : Form
{
private BusinessLogic businessLogic = new BusinessLogic();
private BackgroundWorker worker = new BackgroundWorker();
public Form1()
{
InitializeComponent();
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
}
private void button1_Click(object sender, EventArgs e)
{
worker.RunWorkerAsync();
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
string connectionString = "Data Source=yourServerAddress;Initial Catalog=yourDataBase;User ID=yourUsername;Password=yourPassword;";
string sql = "SELECT * FROM yourTable";
businessLogic.QueryData(connectionString, sql, worker, e);
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
label1.Text = string.Format("{0}%", e.ProgressPercentage);
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
MessageBox.Show("查询已取消!");
}
else
{
MessageBox.Show("查询已完成!");
}
}
}
```
在这个示例代码中,我们首先创建了一个 DataAccess 类,用于执行 SQL 查询。在 BusinessLogic 类中,我们创建了一个 QueryData 方法,用于执行查询并更新进度条。在 UI 层中,我们创建了一个 BackgroundWorker 控件和一个 ProgressBar 控件。当用户单击查询按钮时,我们使用 BackgroundWorker 控件来执行查询,并在 ProgressBar 控件中显示进度条。
阅读全文