如何改进基于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
相关产品推荐
相关产品推荐

