C# 检查数据库和datatable之间是否存在数据

C# 检查数据库和datatable之间是否存在数据,c#,.net,sql-server,C#,.net,Sql Server,我有一个要求,在将数据发送到数据库之前,我需要检查数据重复 基本上,我们有一个EXCEL文件,其中包含列和表中所需的数据。我们需要将数据从EXCEL上传到SQL Server 2008数据库 在上传数据之前,我们使用Microsoft.Ace.OLEDB.12.0加载EXCEL数据,并使用WPF网格向用户显示-这很好 下一步是对照SQL Server DB中的可用数据检查从EXCEL文件加载的数据。我们有一个名为invoice number的主列。该发票号在请求货物的装运部分完成时分布在所有ex

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

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

在上传数据之前,我们使用Microsoft.Ace.OLEDB.12.0加载EXCEL数据,并使用WPF网格向用户显示-这很好

下一步是对照SQL Server DB中的可用数据检查从EXCEL文件加载的数据。我们有一个名为invoice number的主列。该发票号在请求货物的装运部分完成时分布在所有excel文件中。在将此特定发票的所有项目上载到数据库之前,我们需要确保正在上载的数据尚未存在于SQL Server数据库中

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

我们正在将加载的EXCEL数据存储在.net datatable中,并计划将数据从SQL Server加载到Dataset,但不确定这是否是一种好方法

实现这一目标的建议良好做法是什么。我看过这个链接,但不确定这是否能解决我的需求

提前谢谢。

我想试试:

SELECT 'Exists' FROM table where id = @itemId --returns string 'Exists' 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"]) ;
    }
}
最后,您可以检查以下内容:


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

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

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

使用存储过程,然后您可以指定如果不存在,请从表中选择*列=@参数,然后执行我认为您提供的链接是您的解决方案。什么让你不确定?使用内部联接或作为替代LinQs Intersect,您可以找到重复的行并指定要比较的列。@Dannydust,不确定是因为我使用的是Dataset和Datatable方法。我确实知道LINQ to DB应该能够无缝工作,但我仍然有这个疑问,因为我正在检查实时数据,这些数据可能会及时刷新。解决方案似乎不错,但访问和运行SSIS项目的安全影响是什么。我从来没有使用过这个工具,但我肯定可以尝试一下。但是,我听说您需要管理员权限才能运行此操作。因此,如果最终用户上载EXCEL文件,我应该在SQL Server端执行哪些设置,以使SSIS包能够毫无障碍地运行。
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"]) ;
    }
}