首页 > 解决方案 > 读取 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);
            }
        }
    }

标签: c#asp.net-mvcentity-frameworkcsv

解决方案


您的第二个链接包括以下行:

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
}

在这个问题上可能解决了同样的问题。


推荐阅读