[英]Import Data from Excel to SQL Server DB using LINQ to Excel
[英]Import txt data into existing SQL Server table in .net using LINQ
txt文件具有特定格式,它使用“;” 作为分隔符,并具有特定的列数。 我还有一个表,该表是我使用Entity Framework首先创建代码的,该表具有相同的列数。
到目前为止,我已经能够使用“原始” SQL查询(例如BULK INSERT
将此类txt文件导入表中。 但是我正在尝试学习如何使用C#(或LINQ,如果需要)从Web应用程序执行此操作。
我从另一个问题遇到了这个解决方案,但似乎它创建了一个名为tbl的表,而我想做的就是将数据插入到现有表中。
public DataTable ConvertToDataTable (string filePath, int numberOfColumns)
{
DataTable tbl = new DataTable();
for(int col =0; col < numberOfColumns; col++)
tbl.Columns.Add(new DataColumn("Column" + (col+1).ToString()));
string[] lines = System.IO.File.ReadAllLines(filePath);
foreach(string line in lines)
{
var cols = line.Split(':');
DataRow dr = tbl.NewRow();
for(int cIndex=0; cIndex < 3; cIndex++)
{
dr[cIndex] = cols[cIndex];
}
tbl.Rows.Add(dr);
}
return tbl;
}
首先,我的建议是不要自己读取CSV文件。 使用CSVHelper之类的NUGET CSV文件序列化器
使用CSVHelper,您可以将行直接转换为目标类型:
using (TextReader txtReader = new StreamReader(sourceFileName)
{
csvReader = new CsvReader(txtReader)
IEnumerable<MyClass> result = csvReader.GetRecords<MyClass>()
// TODO: put result into database
}
CsvReader的构造函数之一采用一个配置对象,您可以在其中定义定界符(“:”); 标题行; 评论行; 用空行等做什么
如果决定不使用CsvHelper
,则需要将行转换为MyClass
对象:
IEnumerable<MyClass> ConvertTxtFile(string fileName)
{
// TODO: checks to see if fileName is proper file
IEnumerable<string> lines = System.IO.File.ReadAllLines(fileName);
foreach(string line in lines)
{
yield return StringToMyClass(line);
}
}
MyClass StringToMyClass(string line)
{
// TODO: code to convert your line into a MyClass.
}
因为您不问如何将行转换为MyClass,所以我留给您。
一段时间后,您将获得一系列MyClass对象。 您的问题是如何使用Entity Framework和Linq将它们添加到数据库中
好吧,这将是最简单的部分(一旦您学习了如何使用实体框架)。
假设您的DbContext
具有DbSet<MyClass>
,表示MyClass
对象的表
IEnumerable<MyClass> readItems = ConvertTxtFile(fileName);
using (var dbContext = new MyDbContext())
{
dbContext.MyClasses.AddRange(readItems.ToList());
dbContext.SaveChanges();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.