检查数据库和数据表之间的数据是否存在

时间:2013-10-22 05:24:05

标签: c# .net sql-server

我需要在将数据发送到数据库之前检查数据重复。

基本上,我们有一个EXCEL文件,其中包含列和表中所需的数据。我们需要将数据从EXCEL上传到我们的SQL Server 2008 DB。

在上传数据之前,我们使用“Microsoft.Ace.OLEDB.12.0”加载EXCEL数据并使用WPF Grid显示给用户 - 这样可以正常工作。

下一步是根据SQL Server DB中可用的数据检查从EXCEL文件加载的数据。我们有一个名为发票号的主要栏目。此发票编号分布在所有excel文件中,因为所请求货物的装运部分完成。直到此特定发票的所有项目都上传到我们需要确保SQL Server DB中尚未存在的数据。

excel文件有多个列,但我们需要根据几列来检查重复条目。

我们将加载的EXCEL数据存储在.net数据表中,并计划将数据从SQL Server加载到数据集(不确定这是否是一个好方法)

建议的良好做法是什么?我看过这个链接Duplicacy check between DATABASE and DATATABLE,但不确定这是否能解决我的要求。

提前致谢。

2 个答案:

答案 0 :(得分: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 

如果您需要在多个表上进行检查,只需加入它们并执行相同的操作。

另一个aproach就是你提供链接的那个,你可以选择你想要比较的值,用它填充DataTable然后循环它,如下所示:

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

答案 1 :(得分:0)

我不知道背景但是如果您使用的是SQL Server,那么有一个很棒的实用工具叫做SQL Server Integration Services(SSIS)。它使数据迁移(称为ETL:extract-transform-load)非常容易。我知道你必须学习一个新的实用程序,但如果你使用的是SQL Server,那么将来它可能会非常有用!

使用SSIS,您可以将Excel文件作为创建工作流,并将数据作为目标加载到SQL Server。你最终会得到这样的东西:

enter image description here