C# 比较两个表中的数据,一个是Oracle,另一个是SQL Server

C# 比较两个表中的数据,一个是Oracle,另一个是SQL Server,c#,sql-server,database,oracle,oracle11g,C#,Sql Server,Database,Oracle,Oracle11g,我有两个数据库,一个是Oracle 11g,另一个是Sql Server 2012。Oracle数据库中有一个表,其中包含一个名为BASE_ID的列。该列由工单编号组成 在Sql Server数据库中,还有一个表,其中包含一个名为WorkOrders的列。它还包含工单编号。我需要做的是将Oracle列中的内容与SQL Server列中的内容进行比较,并显示Oracle中的内容而不是SQL Server中的内容。我在这里有点困惑,即使是一个起点。我有点像是在胡说八道。到目前为止,我的情况就是这样:

我有两个数据库,一个是Oracle 11g,另一个是Sql Server 2012。Oracle数据库中有一个表,其中包含一个名为BASE_ID的列。该列由工单编号组成

在Sql Server数据库中,还有一个表,其中包含一个名为WorkOrders的列。它还包含工单编号。我需要做的是将Oracle列中的内容与SQL Server列中的内容进行比较,并显示Oracle中的内容而不是SQL Server中的内容。我在这里有点困惑,即使是一个起点。我有点像是在胡说八道。到目前为止,我的情况就是这样:

   private void compare()
    {
        try
        {
            if (con.State != ConnectionState.Open)
                con.Open();
            DataTable t = new DataTable();
            OracleCommand oraCmd = new OracleCommand("SELECT BASE_ID FROM WORK_ORDER x WHERE NOT EXISTS(SELECT NULL FROM [SQLServer].[BACRTest].[WorkOrders] y WHERE y.WorkOrder = x.BASE_ID)", oraconn);
            OracleDataAdapter dt = new OracleDataAdapter(oraCmd);
            dt.Fill(t);
            dataGridView3.DataSource = t;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }

    }
这只是给我抛出了一个
ORA-00903:invalid table name
错误,这很公平,因为我真的不希望它工作


如果您有任何建议,我们将不胜感激。

因为条目位于不同的DBMS上,您无法直接对此进行查询,因此您很可能需要将条目存储在内存中并逐个进行比较。也许您可以将这些表划分为几个小集合,并对它们进行比较,如上所述,如果您安装了正确的产品(例如,用于SQL Server的Oracle数据库网关或用于ODBC的数据库网关),则可以在Oracle和SQL Server之间建立直接连接。如果没有此类产品,可以尝试将SQL Server表导出为逗号分隔值(.csv)文件,然后在Oracle中设置外部表以读取.csv。也许不是世界上最无缝的方法,但它确实代表了一种处理方法


祝你好运。

为什么不分别从两个数据库中提取日期,然后在内存中进行比较呢?我想到了类似的事情。将数据提取到变量中并进行比较。我只是不太确定该怎么做。Oracle和SQL Server数据库之间是否存在允许Oracle查询SQL Server表的连接,或者反之亦然?您可能需要与DBA讨论这一点。如果您有正确的产品(例如,Oracle针对SQL Server的数据库网关,或者如果Oracle实例运行在支持ODBC的平台上,则为ODBC的数据库网关),您当然可以这样做;但是,设置它确实需要一些工作。我支持Bob的建议-将其中一个表导入另一个数据库,并在那里比较两个表。通过从两者中提取数据并在C#、Java或bash(或Excel或其他)中进行比较来比较它们会更加混乱,尤其是如果您有大量数据。