如何使用.NET Core Web API读取本地计算机中的CSV文件
批量导入目录中CSV文件到数据库及.NET Core Web API读取本地CSV方法
一、批量导入目录下所有CSV文件到数据库
开发中经常需要把目录内的所有CSV文件批量导入数据库,以下是实现该需求的核心逻辑与代码:
CSV读取核心连接字符串
通过OLEDB读取CSV文件的连接字符串模板:
const string CSV_CONNECTIONSTRING = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""{0}"";Extended Properties=""text;HDR=YES;FMT=Delimited""";
{0}需替换为CSV文件所在的目录路径(不是单个文件路径)HDR=YES表示CSV第一行是表头,读取时会将其作为列名处理FMT=Delimited指定文件为逗号分隔格式
完整导入代码示例
using System.Data.OleDb; using System.IO; using System.Data.SqlClient; public void ImportAllCsvToDb(string csvDirectory, string dbConnStr) { // 获取目录下所有CSV文件 var csvFiles = Directory.GetFiles(csvDirectory, "*.csv", SearchOption.TopDirectoryOnly); foreach (var csvFile in csvFiles) { var dirPath = Path.GetDirectoryName(csvFile); var fileName = Path.GetFileName(csvFile); // 构建CSV连接字符串 var csvConnStr = string.Format(CSV_CONNECTIONSTRING, dirPath); using (var csvConn = new OleDbConnection(csvConnStr)) { csvConn.Open(); // 读取CSV数据(假设表名与文件名一致,可按需调整) var query = $"SELECT * FROM [{fileName}]"; using (var cmd = new OleDbCommand(query, csvConn)) using (var reader = cmd.ExecuteReader()) { // 批量插入到SQL Server数据库 using (var bulkCopy = new SqlBulkCopy(dbConnStr)) { bulkCopy.DestinationTableName = "目标数据库表名"; // 替换为实际表名 bulkCopy.WriteToServer(reader); } } } } }
二、.NET Core Web API读取本地CSV文件
在.NET Core Web API中读取本地CSV文件,可通过原生文件操作结合简单解析实现,示例如下:
基础读取实现(原生方式)
using Microsoft.AspNetCore.Mvc; using System.IO; [ApiController] [Route("api/csv")] public class CsvController : ControllerBase { [HttpGet("read-local")] public IActionResult ReadLocalCsv(string filePath) { if (!System.IO.File.Exists(filePath)) { return NotFound("指定的CSV文件不存在"); } // 读取所有行 var lines = System.IO.File.ReadAllLines(filePath); if (lines.Length == 0) { return Ok("CSV文件为空"); } // 解析表头与数据行 var header = lines[0].Split(','); var data = lines.Skip(1).Select(line => line.Split(',').ToList()).ToList(); return Ok(new { Header = header, Data = data }); } }
注意事项
- .NET Core应用读取本地文件时,需确保程序拥有对应目录的读写权限
- 若CSV包含复杂格式(如带逗号的字段、换行符),建议使用
CsvHelper等第三方库简化解析逻辑
内容的提问来源于stack exchange,提问作者Shanmuga Mahesh
相关产品推荐
相关产品推荐

