【问题标题】:Read CSV file and insert to LocalDB (asp.net MVC)读取 CSV 文件并插入到 LocalDB (asp.net MVC)
【发布时间】:2019-02-14 10:53:23
【问题描述】:

我正在尝试一个使用 ASP.Net MVC 的项目,并且有一个大型 CSV 文件,我想将它保存到 LocalDB。

我一直在关注这个教程(之前的都是关于 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);
            }
        }
    }

【问题讨论】:

  • 所以您想保存 CSV 的内容而不是整个文件?我假设您已经拥有与 CSV 中的数据相关的模型?
  • 来自 V N Karthikeyan:请检查此链接是否符合您的目的:telerik.com/blogs/upload-large-files-asp-net-radasyncupload
  • 为什么要上传文件?应用程序启动后,您不能将其读入内存吗?然后您可以创建一个 DbContext 并使用 Seed 方法将数据从 .csv 读取到您的数据库。像这样:davepaquette.com/archive/2014/03/18/…
  • @LeonidasFett 你试过这个吗?我已经按照本教程进行操作,但是当我尝试使用 update-database 命令时出现错误:“值不能为空。参数名称:流”。你不会知道怎么了?
  • 请使用引发异常的代码更新您的答案。

标签: c# asp.net-mvc entity-framework csv


【解决方案1】:

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

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
}

question 可能解决了同样的问题。

【讨论】:

    【解决方案2】:

    使用Cinchoo ETL - 一个开源库,您可以用几行代码将 CSV 文件批量加载到 sqlserver。

    using (var p = new ChoCSVReader(** YOUR CSV FILE **)
         .WithFirstLineHeader()
        )
    {
        p.Bcp("** ConnectionString **", "** tablename **");
    }
    

    如需了解更多信息,请访问 codeproject 文章。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 2019-05-17
      • 2017-04-05
      • 2016-07-08
      • 2014-06-15
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多