【发布时间】:2019-09-27 21:09:43
【问题描述】:
到目前为止,CSVHelper .NET 库看起来很棒,但是对于像我这样的伪初学者来说,文档有点缺乏。
我需要读取一个 csv 文件并将结果写入我们的 SQL Server 数据库。对于我正在写入的表,我需要从 CSV 列映射到它的列,包括将多个字段连接到一个。
这是我用来读取 csv 文件的内容:
public static void Main(string[] args)
{
using (var reader = new StreamReader(@"C:\Users\me\Documents\file.csv"))
using (var csv = new CsvReader(reader))
{
csv.Configuration.PrepareHeaderForMatch = (string header, int index) =>
header.Replace(" ", "_").Replace("(", "").Replace(")", "").Replace(".", "");
var records = csv.GetRecords<EntityCsv>().ToList();
}
}
我的 EntityCsv 类包含 csv 文件所有列的属性名称。
然后,我还有一个名为 TaskEntity 的类,其中包含目标数据库表的属性名称和类型(尽管我不清楚是否需要它)。
最后,根据同事的建议,我设置了一个方法来使用SQLBulkCopy,如下所示:
public void AddBulk(List<TaskEntity> entities)
{
using (var con = GetConnection())
{
SqlBulkCopy bulk = new SqlBulkCopy(con);
bulk.BatchSize = 2000;
bulk.BulkCopyTimeout = 0;
bulk.DestinationTableName = "dbo.CsvExports";
bulk.WriteToServer(entities.AsDataTable());
bulk.Close();
}
}
我从他那里借了那个代码块,理论上会在最后一步运行那个方法。
但我知道我在两者之间缺少了一步,那就是将字段从 csv 映射到 SQL 服务器字段。我正在为如何实现这一步而摸不着头脑。
为了简单起见,假设我在 csv 文件中有 3 列,我想将它们映射到 SQL 表的 2 列,如下所示:
CsvColumn1 -> SQLtableColumn1
CsvColumn2 + CsvColumn3 -> SQLtableColumn2
我将如何使用 CsvReader 和 C# 来完成此任务?我已经探索了 CSVReader 文档的映射部分,但我在那里看到的所有内容似乎都是指将输入文件中的列名映射到输出文件中的名称。我在那里(Google 上的任何地方)都没有看到任何专门用于获取输入文件并将其行导出到 SQL 数据库的内容。
【问题讨论】: