您好我正在尝试将一些项目迁移到ASP.Net Core,并且在将.CSV文件上传到我的SQL数据库的正确方法方面存在一些问题。
过去我会通过它上传.CSV文件循环并将该信息存储在DataTable中,然后简单地执行SqlBulkCopy.WriteToServer,但我发现当前在.Net Core中没有DataTable对象。 SQLBulkCopy接受DbDataReader而不是DataTable。
让这个工作的最佳方法是什么。我上传了文件,我可以使用我需要的内容来获取正确格式的数据,以便上传到我的SQL数据库。
对任何想法持开放态度。感谢。
答案 0 :(得分:2)
我使用FastMember's objectreader解决了这个问题,并使用了这样的列映射:
List<Data> lstData = new List<Data>();
//fill list of data..
using (var sqlCopy = new SqlBulkCopy(Config.get("Data:db:ConnectionString")))
{
sqlCopy.DestinationTableName = "[tblBulkCopy]";
sqlCopy.BatchSize = 500;
//map property index to column index in table. in database table the first column is the identitycolumn
sqlCopy.ColumnMappings.Add(0, 1);
sqlCopy.ColumnMappings.Add(1, 2);
sqlCopy.ColumnMappings.Add(2, 3);
var records = lstData.Select(obj => new { col1 = obj.number1, col2 = obj.number2, col3 = obj.number3 });
using (var reader = ObjectReader.Create(records, new[] { "col1", "col2", "col3" }))
{
sqlCopy.WriteToServer(reader);
}
}