2015-05-28 37 views
0

我正在處理函數導入,我有一個包含一些數據的excel文件,稍後將由用戶編輯,我設法通過SmartXLS在C#中導入excel並將所有數據更新到SQL Server數據庫,但是,我所做的是獲取excel文件中的所有數據,並將所有行更新到SQL表中,這會影響性能,並且我還更新了未編輯的行。將Excel中的修改後的數據導入到數據庫中表

我想問一下,有沒有什麼辦法可以在Excel中只獲取修改後的單元格,行並更新到SQL表中的相應數據?

var workbook = new WorkBook(); 
workbook.read(filePath); 
var dataTable = workbook.ExportDataTable(); 
+1

您可以上傳到臨時表,然後更新數據庫中的更改嗎? - 抱歉,不是100%確定性能瓶頸在哪裏。 excel讀取行?插入到數據庫或檢查哪些行已經改變(如果是這樣做 - 是否在客戶端應用程序中的數據表之間?) – gordatron

+0

這些問題不需要回答..他們只是在那裏解釋我的建議;) – gordatron

+0

已更新從什麼時候開始? – artm

回答

1

只是Scenarion,也許它可以幫助你瞭解什麼gordatron和我談論:

以下情況: 有一個表「產品」至極是產品信息 和中央存儲的地方一個表「UpdatedProducts」,其結構看起來與「Products」表完全一樣,但數據 可能不同。想想下面的情景:你在早上將產品表導出爲ex​​cel。整個 一天您刪除,添加,更新您的Excel表中的產品。在一天結束時,您想重新導入您的excel 數據到「產品」表。你需要什麼:

  • 從 「UpdatedProducts」 從Excel
  • 插入數據 「UpdatedProducts」(批量插入如果可能的話)
  • 更新的 「產品」 表中刪除所有記錄

然後合併聲明可能看起來像這樣:

MERGE Products AS TARGET 
USING UpdatedProducts AS SOURCE 
    ON TARGET.ProductID = SOURCE.ProductID 
WHEN MATCHED AND TARGET.ProductName <> SOURCE.ProductName OR TARGET.Rate <> SOURCE.Rate 
    THEN UPDATE SET TARGET.ProductName = SOURCE.ProductName, 
        TARGET.Rate = SOURCE.Rate 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT (ProductID, ProductName, Rate) 
     VALUES (SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate) 
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE 

什麼本聲明: WHEN MATCHED:兩個表中 數據存在,我們在「產品展示」更新數據,如果產品名稱或速率是不同的

WHEN NOT MATCHED BY TARGET: 數據在臨時表存在,但不是在你的原來的表,我們將它們添加到「產品」

WHEN NOT MATCHED BY SOURCE: 數據存在於你的原始表而不是在臨時表中,你將被從「產品」刪除

由於很多http://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/爲這個完美的例子!

+0

謝謝@CeOnSql這是一個明確的答案,我可以抓住你們建議的,現在我正在做的是我將通過一個在Excel文件中收集的數據列表,到SQL根據TVP參數,但我仍然想知道如何在TVP(產品名稱,比率等)中插入到UpdatedProducts表中的數據 –

+0

或者我應該使用批量插入但我不熟悉這種方法 –

+0

我認爲這是最慢的操作案例是從Excel中讀取數據並將其存儲在C#中的DataTable中。如果你能夠將你的excel轉換成csv文件,那麼批量插入將很容易。這裏是如何將xls(x)文件保存到csv的說明:http://stackoverflow.com/questions/2536181/is-there-any-simple-way-to-convert-xls-file-to-csv- file-excel ,在這裏您可以找到如何批量插入此臨時csv:http://stackoverflow.com/questions/19302226/import-excel-to-sql-server-2008 – CeOnSql

相關問題