0

我有一个要求,我需要在将数据发送到数据库之前检查数据重复。

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

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

下一步是检查从 EXCEL 文件加载的数据与 SQL Server DB 中可用的数据。我们有一个名为发票编号的主要列。此发票编号分布在所有 Excel 文件中,因为请求的货物已部分发货。直到这张特定发票的所有项目都上传到数据库中,我们需要确保正在上传的数据不存在于 SQL Server 数据库中。

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

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

实现这一目标的建议良好做法是什么。我已经看到这个链接在 DATABASE 和 DATATABLE 之间进行重复检查,但不确定这是否能解决我的要求。

提前致谢。

4

2 回答 2

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 然后循环它,如下所示:

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"]) ;
    }
}

最后你可以检查一下:

另一个有答案的问题

于 2013-10-22T05:58:02.943 回答
0

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

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

在此处输入图像描述

于 2013-10-22T06:24:29.623 回答