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

如何改进基于OpenFileDialog的代码实现多CSV批量导入MDF数据库?

批量导入多个CSV文件到MDF数据库的解决方案

嘿,你已经搞定了单个CSV导入MDF的功能,现在要升级成批量处理对吧?其实核心就是让OpenFileDialog支持多选,再把单文件处理的逻辑封装成方法循环调用就行,我给你捋清楚步骤和代码:

关键修改点:开启文件多选

首先得调整OpenFileDialog的配置,默认是单选模式,我们要把它改成允许选择多个文件:

OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "CSV files (*.csv)|*.csv|CSV PRN files (*.prn)|*.prn";
ofd.FileName = "";
// 开启多选模式,这是批量处理的核心设置
ofd.Multiselect = true;

// 弹出选择对话框,确认用户选择后开始处理
if (ofd.ShowDialog() == DialogResult.OK)
{
    // 遍历所有选中的文件路径,逐个处理
    foreach (string filePath in ofd.FileNames)
    {
        ImportSingleCsvToMdf(filePath);
    }
}

封装单文件导入方法

把你之前处理单个CSV的逻辑抽成独立方法,这样代码更整洁,也方便后续维护和复用:

private void ImportSingleCsvToMdf(string filePath)
{
    DataTable dt = new DataTable();
    string line = null;
    int rowIndex = 0;

    try
    {
        // 读取CSV文件,注意编码要和你的文件匹配(比如GB2312、UTF8)
        using (StreamReader sr = new StreamReader(filePath, Encoding.UTF8))
        {
            while ((line = sr.ReadLine()) != null)
            {
                // 拆分每行内容,分隔符根据你的CSV实际情况调整(逗号、制表符\t、分号;)
                string[] rowParts = line.Split(',');
                
                if (rowIndex == 0)
                {
                    // 第一行是表头,创建DataTable的列
                    foreach (string header in rowParts)
                    {
                        dt.Columns.Add(new DataColumn(header.Trim()));
                    }
                    rowIndex++;
                }
                else
                {
                    // 后续行是数据,添加到DataTable中
                    dt.Rows.Add(rowParts.Select(part => part.Trim()).ToArray());
                }
            }
        }

        // 把DataTable导入MDF数据库,这里用SqlBulkCopy效率更高
        string connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\YourDatabase.mdf;Integrated Security=True";
        using (SqlConnection conn = new SqlConnection(connStr))
        {
            conn.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
            {
                bulkCopy.DestinationTableName = "你的目标表名"; // 替换成数据库中对应的表名
                // 如果CSV列名和数据库列名完全一致,可自动映射;否则需要手动添加列映射
                foreach (DataColumn col in dt.Columns)
                {
                    bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
                }
                bulkCopy.WriteToServer(dt);
            }
        }

        MessageBox.Show($"文件 {Path.GetFileName(filePath)} 导入成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"导入文件 {Path.GetFileName(filePath)} 失败:{ex.Message}");
    }
}

额外注意事项

  • 编码适配:如果你的CSV文件是GBK或其他编码,记得把Encoding.UTF8改成对应的编码(比如Encoding.GetEncoding("GB2312"))
  • 分隔符调整:部分CSV会用制表符(\t)或分号(;)分隔内容,要根据实际情况修改Split(',')的参数
  • 表结构匹配:确保CSV的列数量、类型和数据库目标表一致,避免导入时出现类型不匹配的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:16:53