如何将大量数据加载到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();
你必须处理一些事情:
- 工作表的名称应该是Sheet1,否则在查询中给出正确的名称。
- 阅读纸张时,纸张不应该打开。
- 列名应该在查询中正确定义
- 列名称应该位于工作表的第一行
我希望它会帮助你…让我知道如果有更多的东西你需要… 🙂
您可以使用Sql批量复制来执行此类操作。
尝试读取variables的值,并做一些filter,以避免发送错误的值,可能会影响您的数据库。 把未知的数据保存到数据库是最错误的,特别是MS SQL – 做一些过滤,使保存更容易,并保持你的数据库的健康。