如何将大量数据加载到DataTable

我从Excel导出数据到DataTable,但是当我的Excel文件包含大量行时,我遇到了一些性能问题…

public DataView LoadFromExcel() { Microsoft.Office.Interop.Excel.Application application = new Microsoft.Office.Interop.Excel.Application(); Workbook workbook = null; Worksheet worksheet = null; string filename = null; OpenFileDialog file = new OpenFileDialog(); if (true == file.ShowDialog()) { filename = file.FileName; } workbook = application.Workbooks.Open(filename, true, true); worksheet = workbook.Sheets[1]; Range range = worksheet.UsedRange; int row = range.Rows.Count; int columns = range.Columns.Count; System.Data.DataTable dt = new System.Data.DataTable(); for (int i = 1; i <= columns; i++) { dt.Columns.Add((range.Cells[1, i] as Range).Value2.ToString()); } for (row = 2; row <= range.Rows.Count; row++) { DataRow dr = dt.NewRow(); for (int column = 1; column <= range.Columns.Count; column++) { dr[column - 1] = (range.Cells[row, column] as Microsoft.Office.Interop.Excel.Range).Value2.ToString(); } dt.Rows.Add(dr); dt.AcceptChanges(); } workbook.Close(true, Missing.Value, Missing.Value); application.Quit(); return dt.DefaultView; } 

有什么办法可以解决这个问题吗? 请帮忙。

我认为这不是正确的做法。

要将大量数据插入到表中,应使用数据库的“批量插入”function,并在批量插入期间closures数据库日志和回滚function。 否则,批量插入就像一堆普通的插入。

我知道甲骨文和SQL Server有这个function,一些NoSQL数据库也有这个function。 由于你没有提到你的数据库,它有助于谷歌。

你可以在OLEDB供应商的帮助下做到这一点。 我曾尝试做50000条logging。 它可以帮助你,只是尝试下面的代码:

  // txtPath.Text is the path to the excel file. string conString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + txtPath.Text + ";" + "Extended Properties=" + "\"" + "Excel 12.0;HDR=YES;" + "\""; OleDbConnection oleCon = new OleDbConnection(conString); OleDbCommand oleCmd = new OleDbCommand("SELECT field1, field2, field3 FROM [Sheet1$]", oleCon); DataTable dt = new DataTable(); oleCon.Open(); dt.Load(oleCmd.ExecuteReader()); oleCon.Close(); 

你必须处理一些事情:

  1. 工作表的名称应该是Sheet1,否则在查询中给出正确的名称。
  2. 阅读纸张时,纸张不应该打开。
  3. 列名应该在查询中正确定义
  4. 列名称应该位于工作表的第一行

我希望它会帮助你…让我知道如果有更多的东西你需要… 🙂

您可以使用Sql批量复制来执行此类操作。

尝试读取variables的值,并做一些filter,以避免发送错误的值,可能会影响您的数据库。 把未知的数据保存到数据库是最错误的,特别是MS SQL – 做一些过滤,使保存更容易,并保持你的数据库的健康。