You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForm:提取CSV指定内容到DataGridView并保存至数据库

实现CSV数据筛选、绑定到DataGridView并保存到数据库

我来帮你完善这个需求的实现,分读取筛选CSV数据、绑定到DataGridView,以及保存到数据库三个核心部分来梳理:

1. 读取CSV并筛选目标行之后的数据

你的思路是对的,需要先跳过Tango N$10 Voucher Benefit,10之前的所有行,从它的下一行开始加载数据。这里我给你优化代码,加入DataTable来规范数据结构,方便后续绑定和保存:

try
{
    var filePath = Path.GetFullPath(openAirtimeFile.FileName);
    var allLines = File.ReadAllLines(filePath);
    
    // 定位目标起始行的位置(找到目标行后,从下一行开始读取)
    int startDataIndex = -1;
    for (int i = 0; i < allLines.Length; i++)
    {
        var trimmedLine = allLines[i].Trim();
        if (trimmedLine.Equals("Tango N$10 Voucher Benefit,10", StringComparison.OrdinalIgnoreCase))
        {
            startDataIndex = i + 1;
            break;
        }
    }

    // 没找到目标行的情况提示用户
    if (startDataIndex == -1)
    {
        MessageBox.Show("未找到指定的起始行,请检查CSV文件内容!");
        return;
    }

    // 创建DataTable用于存储数据(兼容表头和数据行)
    DataTable csvDataTable = new DataTable();
    
    // 假设目标行的下一行是表头,先添加列
    string headerLine = allLines[startDataIndex].Trim();
    string[] columnHeaders = headerLine.Split(',');
    foreach (string header in columnHeaders)
    {
        csvDataTable.Columns.Add(header.Trim());
    }

    // 遍历读取后续所有数据行
    for (int i = startDataIndex + 1; i < allLines.Length; i++)
    {
        string currentLine = allLines[i].Trim();
        // 跳过空行避免报错
        if (string.IsNullOrWhiteSpace(currentLine)) continue;
        
        string[] rowData = currentLine.Split(',');
        // 确保数据列数和表头一致,防止插入错误
        if (rowData.Length == csvDataTable.Columns.Count)
        {
            csvDataTable.Rows.Add(rowData);
        }
    }

    // 将DataTable绑定到DataGridView
    dataGridView1.DataSource = csvDataTable;
}
catch (Exception ex)
{
    MessageBox.Show($"读取CSV文件时出错:{ex.Message}");
}

注意事项:

  • 如果你的CSV没有表头行,可以手动创建DataTable列,比如csvDataTable.Columns.Add("手机号");这样的方式,替换掉读取表头的代码。
  • 如果CSV中存在带逗号的字段(比如用引号包裹的内容),直接用Split(',')会出错,这种情况推荐使用专门的CSV解析库CsvHelper(NuGet可以安装),处理复杂格式更可靠。

2. 将DataGridView中的数据保存到数据库

这里以SQL Server为例,用SqlBulkCopy实现批量插入,效率比逐行插入高很多:

private void SaveDataToDatabase(DataTable dataTable)
{
    // 替换成你的数据库连接字符串
    string connString = "Server=你的服务器地址;Database=目标数据库名;User Id=用户名;Password=密码;";

    using (SqlConnection connection = new SqlConnection(connString))
    {
        connection.Open();
        
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
        {
            // 指定数据库中的目标表名
            bulkCopy.DestinationTableName = "你的数据库表名";
            
            // 映射DataTable列和数据库表的列(如果列名完全一致,这个循环可以省略)
            foreach (DataColumn column in dataTable.Columns)
            {
                bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);
            }

            try
            {
                bulkCopy.WriteToServer(dataTable);
                MessageBox.Show("数据成功保存到数据库!");
            }
            catch (Exception ex)
            {
                MessageBox.Show($"保存数据时出错:{ex.Message}");
            }
        }
    }
}

调用方式:

在绑定完DataGridView之后,直接调用这个方法即可:

SaveDataToDatabase((DataTable)dataGridView1.DataSource);

内容的提问来源于stack exchange,提问作者PearlP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:28:22