我需要在将数据发送到数据库之前检查数据重复。
基本上,我们有一个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,但不确定这是否能解决我的要求。
提前致谢。
答案 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"]) ;
}
}
最后你可以检查一下:
答案 1 :(得分:0)
我不知道背景但是如果您使用的是SQL Server,那么有一个很棒的实用工具叫做SQL Server Integration Services(SSIS)。它使数据迁移(称为ETL:extract-transform-load)非常容易。我知道你必须学习一个新的实用程序,但如果你使用的是SQL Server,那么将来它可能会非常有用!
使用SSIS,您可以将Excel文件作为源创建工作流,并将数据作为目标加载到SQL Server。你最终会得到这样的东西: