2015-11-25 39 views
2

我正在處理一個表單,它將允許我的用戶選擇電子表格並將其數據複製到SQLite數據庫。我的SQLite查詢是事務,發生在大約一秒鐘內,但我的代碼中沒有正確運行的部分是它通過Excel範圍循環並創建我的插入語句的地方。它是一個嵌套的循環,用於遍歷所選範圍和所有行中的所有列。整個360行和43列電子表格的整個過程需要大約四分鐘的時間才能運行。我最初認爲這是SQLite插入,所以我將它轉換爲批量插入。一旦我挖了一點,並通過代碼,我意識到這是'for'循環造成的。這裏是我的代碼:緩慢嵌套'for'循環讀取Excel對象

int counter = 1; 
     string contents = null; 
     string bulkInsert = null; 
     Excel.Application xlApp = new Excel.Application(); 
     Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(file); 
     Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; 
     Excel.Range xlRange = xlWorksheet.UsedRange; 

     int rowCount = xlRange.Rows.Count; 
     int colCount = xlRange.Columns.Count; 

     for (int i = 2; i <= rowCount; i++) 
     { 

       for (int j = 1; j <= colCount; j++) 
       { 
        contents = contents + Convert.ToString("'" + xlRange.Cells[i, j].Value2) + "',"; 


        //MessageBox.Show(xlRange.Cells[i, j].Value2.ToString()); 


       } 
       contents = contents.Remove(contents.Length - 1); 
       bulkInsert = bulkInsert + "INSERT INTO DeferralInput VALUES (" + contents + "); "; 
       contents = ""; 
     } 

     bulkInsert = "BEGIN TRANSACTION; " + bulkInsert + " COMMIT;"; 
     xlApp.Quit(); 
     ExecuteQuery(bulkInsert); 

如果任何人有關於如何加快這有什麼想法,或者如果我做錯了,我打開嘗試任何事情。

回答

1

Importing Excel into a DataTable Quickly

我相信上面的問題應該可以解決你的問題。 .value2的個人電話正在引發問題。你可以將值複製到數組或數據表中,並相應地進行操作來加快速度。

+0

你是對的,先生。感謝您在感恩節前一天爲我節省大量頭痛!這現在需要所有的毫秒。 – VinnyGuitara

+0

不客氣。我很高興我能幫上忙。 – Maertin