C# c组合来自两个不同数据库提供者的两个结果

C# c组合来自两个不同数据库提供者的两个结果,c#,C#,我需要检查表1中是否添加了一些内容,如果是,我需要从这个表中获取一些值,并将其插入第二个表2中。 问题是表1是通过OleDbConnection连接的.DBF Provider=VFPOLEDB.1,第二个表2是通过SqlConnection连接的MSSQL表 我想做这样的东西: 从表1中选择column1,其中column1不在表2中选择column2 有可能这样做吗?我可以通过执行以下操作将两个表加载到datagridview: public static DataTable GetData

我需要检查表1中是否添加了一些内容,如果是,我需要从这个表中获取一些值,并将其插入第二个表2中。 问题是表1是通过OleDbConnection连接的.DBF Provider=VFPOLEDB.1,第二个表2是通过SqlConnection连接的MSSQL表

我想做这样的东西: 从表1中选择column1,其中column1不在表2中选择column2

有可能这样做吗?我可以通过执行以下操作将两个表加载到datagridview:

public static DataTable GetDataTableDBF(string strFileName)

    {

        OleDbConnection conFOX = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=" + Path.GetFullPath(strFileName).Replace(Path.GetFileName(strFileName), "") + ";Exclusive=No");

        conFOX.Open();

        string strQuery = "SELECT * FROM [" + Path.GetFileName(strFileName) + "]";

        OleDbDataAdapter adapter = new OleDbDataAdapter(strQuery, conFOX);

        DataSet ds = new DataSet();

        adapter.Fill(ds);

        return ds.Tables[0];

    }
对于OLEDB连接和执行:

public static DataTable GetDataTableSQL(string TableName)

    {

        SqlConnection conSQL = new SqlConnection(connection);
        SqlDataAdapter da = new SqlDataAdapter();
        DataSet ds = new DataSet();

        conSQL.Open();

        string strQuery = "SELECT * FROM " + TableName;
        da.SelectCommand = new SqlCommand(strQuery, conSQL);

        da.Fill(ds);

        return ds.Tables[0];

    }
用于SqlConnection。也许我可以从这个查询中创建两个数据集或类似临时表的东西?那么会是这样的吗

SELECT dataset1.column1 FROM dataset1 WHERE dataset1.column1 NOT IN (SELECT dataset2.column2 FROM dataset2) 

由于这两个数据表来自不同的源,您需要将这两个数据表都提取到内存中,然后使用linq创建数据集。像这样的

    var datatable1 = GetDataTableDBF("filename");
    var datatable2 = GetDataTableSQL("tablename");

    var query = from c in dataset1.AsEnumerable()
                where !(from o in dataset2.AsEnumerable()
                        select o.Field<int>("column2")).Contains(c.Field<int>("column1"))
                select c;

    var filteredDataTable1 = query.CopyToDataTable();

    var resultDataTable = filteredDataTable1.DefaultView.ToTable(false, "column1"); //create new table with only 1 column

    dataGridView1.DataSource = resultDataTable;

谢谢你的回答。我将对此进行测试,但我以前从未使用过Linq,所以您能为我进一步解释一下吗?如何使用它,应该使用什么提供程序或数据适配器来填充数据集?我想在新的DataGridView中显示该资源。您已经有2个方法来获取datatables。使用这些方法获取2个datatables,然后linq query将为您提供所需的数据。最后将查询绑定到datagrid。确定,但当我设置:“dvgTest.DataSource=datatable1;”我得到了一个DataTable1结果,一切正常。datatable2也是如此。但是当我在LINQ中做一些更简单的事情时:'var query=from c in datatable2.AsEnumerable select c;dvgTest.DataSource=query;'我不会得到任何结果。为什么?对不起,我发现我没有在查询的末尾加上。ToList。当我放置query.ToList时,我得到一个列标题为的结果,如:RowError、RowState、Table、HasError。为什么?我已经更新了答案。你应该创建datatable而不是list。