使用.NET MVC视图将CSV或Excel文件导入SQL Server 2005的最佳方法是什么?

5
我正在寻找将CSV或Excel文件导入SQL Server 2005的最佳方法,使用.NET MVC。谢谢。
2个回答

3

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

您可以毫不费力地使用它将CSV文件加载到内存对象中,并使用ADO.NET将其存储在SQL Server中。

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

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

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]或其他属性?


嗨,感谢您的回复。我看了一下File Helper程序。我正在使用ActiveRecord和NHibernate。我遇到了这个错误:该记录类没有记录。在这一行上:FileHelperEngine engine = new FileHelperEngine(typeof(BlackListDevice));再次感谢您的帮助。 - user189009
是的,我的类看起来像这样[DelimitedRecord(" ")] [ActiveRecord] public class BlackListDevice: Identified { [Property] public virtual string DeviceReference { get; set; } } - user189009
你是在什么时候遇到这个错误的?编译时还是运行时?你的文件是否真的包含任何数据,并且这些数据是否与你的记录结构匹配? - marc_s
如果你有100万条记录或更多,这样做真的明智吗? - Jon
不,如果你有那么多记录,我可能会找到一种使用批量复制方法的方式。但这很少见 - 通常,你最多只有几百或几千个记录 - 对于这些80-90%的情况,FileHelpers非常好用。 - marc_s

0
通过添加一个专门用于文件上传的类来解决了这个问题,使用FileHelper非常顺畅。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接