我正在解析CSV文件并创建一个对象列表,我需要将这些对象导入SQL DB。 csv文件具有不同的标题名称,我可以将它们映射到特定表的每一列。
由于名称不匹配,LINQ失败。
我确实尝试了所有可能的教程和方法,但是无法将csv标头映射到数据库的特定列。
using (TextReader reader = File.OpenText(file))
{
List<CSVObject> ListCSVObject = new List<CSVObject>();
CsvReader csv = new CsvReader(reader);
csv.Configuration.Delimiter = ",";
csv.Configuration.MissingFieldFound = null;
while (csv.Read())
{
CSVObject objectRow = csv.GetRecord<CSVObject>();
double time = Convert.ToDouble(objectRow.Timestamp);
DateTime dateTimeUTC = ConvertFromUnixTimestamp(time);
objectRow.DateTimeUTC = dateTimeUTC;
ListCSVObject.Add(objectRow);
}
LINQToSQLDataContext db = new LINQToSQLDataContext(connectString);
foreach(CSVObject obj in ListCSVObject)
{
db.dbtoinsert.InsertOnSubmit(obj);
}
db.SubmitChanges();
}
答案 0 :(得分:1)
我的建议:不要构建自己的CSV文件阅读器;改用Nuget包CsvHelper
CsvHelper可以获取任何结构化的CSV文件,可以使用任何类型的分隔符,并且可以带或不带标题行。
如果您的CSV包含标题行,则可以告诉CSV帮助器,应将标记为“家庭名称”的列放在您的课程的属性“姓氏”中。
即使您的CSV文件中没有标题行,您也可以说第7列应映射为“ LastName”,第9列应映射为“ BirthDay”
访问the documentation page以获得简单示例
答案 1 :(得分:0)
您可以在将对象插入数据库之前进行对象初始化。
类似这样的东西。
db.dbtoinsert.InsertOnSubmit(new YourTable { Col1 = obj.CSVCol1, ... });