【问题标题】:Best method for importing csv or excel file to SQL Server 2005 using .net MVC view使用 .net MVC 视图将 csv 或 excel 文件导入 SQL Server 2005 的最佳方法
【发布时间】:2009-10-13 10:29:46
【问题描述】:

我正在寻找使用 .net MVC 将 csv 或 excel 文件导入 SQL Server 2005 的最佳方法。

谢谢。

【问题讨论】:

    标签: asp.net-mvc sql-server-2005 excel csv


    【解决方案1】:

    有一个非常好的库,叫做 FileHelpers,它 a) 100% 免费,b) 完全使用 C#,它可以轻松导入任何类型的基于文本的文件 - 逗号分隔、制表符分隔、固定宽度和以此类推。

    您应该可以毫无问题地使用它来将 CSV 文件加载到内存对象中并使用 ADO.NET 将这些文件存储在 SQL Server 中。

    在 FileHelpers 中,您首先需要有一个描述您的数据的类,例如“客户”类(或您要导入的任何内容)。

    然后,您可以使用以下代码导入文件:

    FileHelperEngine<Customer> engine = new FileHelperEngine<Customer>();
    Customer[] dataLoaded = engine.ReadFile(fileName);
    

    一旦您拥有了客户数组,您就可以遍历它并保存数据(通常在交易中),例如存储过程或即席 SQL 查询:

    using(TransactionScope ts = new TransactionScope())
    {
       foreach(Customer c in dataLoadad)
       {
          SaveCustomer(c);
       }
    
       ts.Complete();
    }
    

    或者您可以将客户数组转换为 DataTable 并使用 SqlBulkCopy 将其批量插入您的 SQL Server 数据库 - 有很多选择!

    更新:
    你的BlackListDevice 类中是否有[DelimitedRecord] 或其他这些属性?

    【讨论】:

    • 您好,感谢您的回复。我看了一下文件助手。我正在使用 ActiveRecord 和 NHibernate。我收到此错误记录类没有记录。在这一行 FileHelperEngine engine = new FileHelperEngine(typeof(BlackListDevice));再次感谢您的帮助。
    • 是的,我的班级看起来像这样 [DelimitedRecord(" ")] [ActiveRecord] public class BlackListDevice: Identified { [Property] public virtual string DeviceReference { get;放; } }
    • 什么时候出现这个错误?编译的时候?跑的时候?您的文件是否真的包含任何数据,是否包含与您的记录结构相匹配的数据?
    • 如果您有 1,000,000 条或更多记录,这真的可取吗?
    • 不,如果您有那么多记录,我可能会找到一种使用批量复制方法的方法。但这种情况很少见 - 通常,您最多有几百或几千个 - 对于那些 80-90% 的情况,FileHelpers 就像一个魅力。
    【解决方案2】:

    通过添加一个单独的文件上传类来解决这个问题,就像使用 FileHelper 的魅力一样。

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      相关资源
      最近更新 更多