[英]How to load large amount of data to 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;
}
有什么辦法可以解決這個問題嗎? 請幫忙。
您可以在OLEDb提供商的幫助下完成。 我嘗試過50000條記錄。 它可以幫到你,只需嘗試下面的代碼:
// 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();
你必須要做的事情很少:
我希望它會對你有所幫助......如果你需要更多東西,請告訴我...... :)
您可以使用Sql批量復制來執行此類操作。
我認為這不是正確的方法。
要將大量數據插入表中,應使用數據庫的“批量插入”功能,在批量插入期間,應關閉數據庫日志和回滾功能。 否則,批量插入物就像一堆普通插入物一樣。
我知道Oracle和SQL Server有這個功能,一些NoSQL數據庫也有這個功能。 由於您還沒有提到您的數據庫是什么,因此谷歌有用。
嘗試將值讀取到變量並執行一些過濾器,以避免發送可能影響數據庫的錯誤值。 將未知數據保存到數據庫是錯誤的,尤其是MS SQL - 進行一些過濾以使保存更容易並保持數據庫運行狀況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.