WinForm中使用HttpWebRequest批量导入数据到数据库,并显示进度
时间: 2024-12-08 14:17:21 浏览: 24
在Windows Form (WinForm) 中,你可以使用 `System.Net.HttpWebRequest` 类配合多线程来实现批量导入数据到数据库,并通过显示进度条提供用户反馈。以下是简要步骤:
1. 引入所需库:首先,需要引入 System.Net 和 System.Threading.Tasks 等库。
```csharp
using System;
using System.Data.SqlClient;
using System.IO;
using System.Net;
using System.Threading.Tasks;
```
2. 创建任务列表:将要导入的数据分割成多个小任务,每个任务对应一条或多条数据。
```csharp
List<Task> tasks = new List<Task>();
for (int i = 0; i < totalRecords; i++)
{
// 这里totalRecords是总记录数
tasks.Add(ImportDataAsync(i * batchSize, batchSize)); // batchSize是你想要一次处理的记录数
}
```
3. 定义异步方法 ImportDataAsync 来发送请求并导入数据,同时更新进度:
```csharp
private async Task ImportDataAsync(int start, int count)
{
string connectionString = "your_connection_string_here";
using (var request = WebRequest.Create("http://api_url") as HttpWebRequest)
{
request.Method = "POST";
request.ContentType = "application/json";
// 发送请求
var response = await request.GetResponseAsync();
// 获取响应内容
using (var reader = new StreamReader(response.GetResponseStream()))
{
// 将响应内容解析为数据库可以接受的数据结构
var dataToSave = await reader.ReadToEndAsync();
// 使用事务来保证原子操作
using (var connection = new SqlConnection(connectionString))
{
await connection.OpenAsync();
using (var transaction = connection.BeginTransaction())
{
try
{
// 插入数据
for (int j = start; j < start + count; j++)
{
// 根据实际数据库表结构和数据调整这里的SQL语句
string sql = $"INSERT INTO your_table (column1, column2, ...) VALUES (@value1, @value2, ...)";
SqlCommand command = new SqlCommand(sql, connection);
command.Parameters.AddWithValue("@value1", dataToSave[j].Value1);
// 更多参数...
await command.ExecuteNonQueryAsync();
}
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
Console.WriteLine($"Error importing data: {ex.Message}");
}
}
}
// 更新进度条或其他UI元素
UpdateProgress(start + count);
}
}
}
// 更新进度方法
private void UpdateProgress(int current)
{
// 实现进度条更新逻辑,比如进度百分比或UI控件的更新
}
// 启动任务
foreach (Task task in tasks)
{
task.Start();
}
```
4. 添加进度条和UI交互:为了展示进度,你需要添加一个进度条控件(如 ProgressBar),并在 ImportDataAsync 方法中更新它。
5. 错误处理:别忘了添加适当的错误处理机制,以确保在整个过程中能够优雅地处理网络异常、数据库连接问题等。
阅读全文