2013-10-22 99 views
0

我有一個需求,在數據發送到數據庫之前需要檢查數據重複。檢查數據庫和數據表之間的數據存在

基本上,我們有一個EXCEL文件,其中包含列和表中所需的數據。我們需要將數據從EXCEL上傳到我們的SQL Server 2008數據庫。

在上傳數據之前,我們使用「Microsoft.Ace.OLEDB.12.0」加載EXCEL數據並使用WPF Grid顯示給用戶 - 這工作正常。

下一步是檢查從EXCEL文件加載的數據與SQL Server數據庫中可用的數據。我們有一個稱爲發票號的主要欄。由於所需商品的發貨部分完成,因此該發票號碼分佈在所有的Excel文件中。直到此特定發票的所有項目都上傳到數據庫中,我們需要確保正在上載的數據不在SQL Server數據庫中。

該excel文件有多個列,但我們需要檢查基於幾個列重複條目。

我們在存儲數據表.NET和規劃加載EXCEL數據從SQL Server的數據加載到數據集(不知道這是一個好方法)

什麼建議的良好做法實現這一目標。我已經看到這個鏈接Duplicacy check between DATABASE and DATATABLE,但不知道這是否會解決我的要求。

在此先感謝。

+0

使用存儲過程,那麼你可以指定不存在(select * from表where列= @參數),那麼做任何 – zxc

+0

我想您所提供的鏈接你的解決方案什麼讓你不確定?使用內部聯接(或作爲LinQs交叉的替代方法),您可以找到重複的行並指定要比較的列。 – Dannydust

+0

@Dannydust,不確定是因爲我使用的數據集和數據表的方法。我知道LINQ to DB應該可以無縫工作,但仍然存在疑問,因爲我正在檢查可能及時刷新的實時數據。 – aioracle

回答

0

我會嘗試之一:

SELECT 'Exists' FROM table where id = @itemId --returns string 'Exists' if there is an item 

或者

SELECT ISNULL(id, '0') FROM table where id = @itemId -- returns '0' if there is an item 

或者

SELECT ISNULL(id, 0) FROM table where id = @itemId -- returns 0 if there is an item 

如果您需要檢查它在多個表上只加入他們的行列,做同樣的。

另一種形式給出了是你提供的鏈接之一,你可以選擇你要比較的值,填寫數據表與它,然後遍歷,就像這樣:

DataTable dt = new DataTable(); 
SqlDataAdapter adapt = new SqlDataAdapter("SELECT id FROM table", connection); 
adapt.Fill(dt); 

for (int i = 0; i < excelDataTable.Rows.Count; i++) 
{ 
    for (int j = 0; j < dt.Rows.Count; j++) 
    { 
     if (excelDataTable.Rows[i]["col_name"] == dt.Rows[j]["col_name"]) ; 
    } 
} 

最後,你可以檢查這樣的:

Another question with answer

0

我不知道的背景,但如果你正在使用SQL Server有一個叫做SQL Server集成服務(SSIS)非常實用。它使得數據遷移(稱爲ETL:提取 - 轉換 - 加載)非常簡單。我知道你將不得不學習一個新的實用程序,但如果你使用SQL Server,那麼它將來可能會非常有用!

使用SSIS你可以用Excel中的工作流程文件作爲並加載數據到SQL Server作爲目的地。你最終會是這樣的:

enter image description here

+0

該解決方案看起來不錯,但訪問和運行SSIS項目會帶來什麼安全隱患。我沒有時間使用這個工具,但可以肯定地嘗試一下。但是,我聽說您需要管理員權限才能運行此操作。因此,如果最終用戶上傳EXCEL文件,那麼我應該在SQL Server端做什麼設置,以便SSIS包無任何障礙地運行。 – aioracle

+0

看看這個:http://technet.microsoft.com/en-us/library/ms141053.aspx – Pellared

相關問題