如何更有效地处理excel文件?

时间:2013-05-28 13:31:29

标签: asp.net-mvc performance excel file-upload

我有一个excel文件,通过我的MVC网络应用程序进入,我必须处理和处理。所以我在控制器上收到我的文件

public class StripExcelDocument 
{
    public DataSet Convert(HttpPostedFileBase file)
        {
            return GetDataFromExcel(file.InputStream);
        }

        private DataSet GetDataFromExcel(Stream target)
        {
            var excelReader = ExcelReaderFactory.CreateOpenXmlReader(target);
            excelReader.IsFirstRowAsColumnNames = true;
            return excelReader.AsDataSet();
        }
}

我通过我创建的处理器发送它只是一个大条件语句,然后根据结果发送到数据库中的特定表。

 public class Processor{
      public Result Process
      {
            if (FirstCondition(string foo, int bar)){
                SetResult(foo, bar);
                }

            if (SecondCondition(string foo, int bar)){
                SetResult(foo, bar);
                }

            if (ThirdCondition(string foo, int bar)){
                SetResult(foo, bar);
                }

                //etc...

显然,当用户想要输入单个记录但处理大型excel文件时,这种方法很有用:

A:在服务器上超时。 B:让用户盯着屏幕看一会儿。

处理从excel文件批量处理大量数据的更有效方法是什么,其中记录需要是数据库中自己的实体?

1 个答案:

答案 0 :(得分:1)

尽量将它作为最后一个选项。因为SqlBulkCopy属于某些旧版本的.net,现在可能会有更好的东西。

  
      
  1. 对某些表格中的Excel工作表的所有记录执行批量导入。所以你可以使用SqlBulkCopy。
  2.   
  3. 创建存储过程并根据条件,一次性使用“插入/更新”。
  4.   

与后面的代码中的Linq操作相比,存储过程中的上述方法会更快。

  

A:在服务器上超时。 B:让用户盯着屏幕   一会儿。

异步执行。

示例代码

class ThreadTest
{
  public ActionResult Main()
  {
    Thread t = new Thread (WriteY);
    t.Start();         
    return View();
  }

  void WriteY()
  {

  }
}

适用于TimeOut

sqlcommand.CommandTimeout = 0会将其设为无限