簡體   English   中英

如何將大量數據加載到DataTable

[英]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();

你必須要做的事情很少:

  1. 工作表的名稱應為Sheet1,否則在查詢中給出正確的名稱。
  2. 在閱讀紙張時,不應打開紙張。
  3. 應在查詢中正確定義列名稱
  4. 列名應位於工作表的第一行

我希望它會對你有所幫助......如果你需要更多東西,請告訴我...... :)

您可以使用Sql批量復制來執行此類操作。

我認為這不是正確的方法。

要將大量數據插入表中,應使用數據庫的“批量插入”功能,在批量插入期間,應關閉數據庫日志和回滾功能。 否則,批量插入物就像一堆普通插入物一樣。

我知道Oracle和SQL Server有這個功能,一些NoSQL數據庫也有這個功能。 由於您還沒有提到您的數據庫是什么,因此谷歌有用。

嘗試將值讀取到變量並執行一些過濾器,以避免發送可能影響數據庫的錯誤值。 將未知數據保存到數據庫是錯誤的,尤其是MS SQL - 進行一些過濾以使保存更容易並保持數據庫運行狀況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM