c# - 读取 CSV 文件并插入到 LocalDB (asp.net MVC)
问题描述
我正在尝试一个带有 ASP.Net MVC 的项目,并且有一个我想保存到 LocalDB 的大型 CSV 文件。
我一直在关注本教程(之前的教程是关于 MVC 的):https ://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/creating-a-connection-string
现在我想将数据添加到我已设置的数据库中,我想从 csv 文件中读取这些数据,然后将其保存到我的数据库中。
我试过这个:https ://www.aspsnippets.com/Articles/Upload-Read-and-Display-CSV-file-Text-File-data-in-ASPNet-MVC.aspx 但是当我尝试上传我的文件时我收到一个错误,说我的文件太大?
如果它可以自动化,我会喜欢它,这样当我启动我的应用程序时,数据库将填充我的 csv 文件中的数据(如果它已经填充,它将不会再这样做)或者只是某种编码方式,以便我可以将 csv 文件中的数据添加到数据库 (LocalDB)。
protected override void Seed(ProductsDBContext context)
{
Assembly assembly = Assembly.GetExecutingAssembly();
string resourceName = "WebbApplication.App_Data.SeedData.price_detail.csv";
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
CsvReader csvReader = new CsvReader(reader);
var products = csvReader.GetRecords<PriceDetail>().ToArray();
context.PriceDetails.AddOrUpdate(c => c.PriceValueId, products);
}
}
}
解决方案
您的第二个链接包括以下行:
string csvData = System.IO.File.ReadAllText(filePath);
如果您遇到内存不足异常,那么您不应该一次将整个文件加载到内存中 - 即不要读取所有文本。
StreamReader 有一个内置函数来处理这个问题。
System.IO.StreamReader file = new System.IO.StreamReader("WebbApplication.App_Data.SeedData.price_detail.csv");
while((line = file.ReadLine()) != null)
{
System.Console.WriteLine(line);
//Replace with your operation below
}
在这个问题上可能解决了同样的问题。