0

我有一个通过我的 MVC Web 应用程序输入的 excel 文件,我必须处理和做一些事情。所以我在控制器上收到我的文件

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 文件的大量数据,其中记录需要是数据库中自己的实体?

4

1 回答 1

1

尽量把它作为最后的选择。因为SqlBulkCopy属于一些较旧版本的 .net,并且现在可能有一些更好的东西可用。

  1. 对某个表中的所有excel表记录进行批量导入。所以你可以使用 SqlBulkCopy。
  2. 创建一个存储过程并根据条件,一次性使用插入/更新。

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

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

异步执行。

示例代码

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

  void WriteY()
  {

  }
}

超时

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

于 2013-05-28T14:01:04.193 回答