我有一个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文件批量处理大量数据的更有效方法是什么,其中记录需要是数据库中自己的实体?
答案 0 :(得分:1)
尽量将它作为最后一个选项。因为SqlBulkCopy
属于某些旧版本的.net,现在可能会有更好的东西。
- 对某些表格中的Excel工作表的所有记录执行批量导入。所以你可以使用SqlBulkCopy。
- 创建存储过程并根据条件,一次性使用“插入/更新”。
醇>
与后面的代码中的Linq操作相比,存储过程中的上述方法会更快。
A:在服务器上超时。 B:让用户盯着屏幕 一会儿。
异步执行。
class ThreadTest
{
public ActionResult Main()
{
Thread t = new Thread (WriteY);
t.Start();
return View();
}
void WriteY()
{
}
}
适用于TimeOut
sqlcommand.CommandTimeout = 0
会将其设为无限