c#结合两个不同数据库提供程序的两个结果

时间:2017-07-19 13:50:49

标签: c#

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

我想做这样的事情: SELECT column1 FROM Table1 WHERE column1 NOT IN(SELECT column2 FROM Table2)

有可能这样做吗?我可以通过执行以下操作将两个表加载到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];

    }

对于OleDbConnection和做:

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。 Mayby我可以从这个查询中做2个数据集或类似临时表的东西吗?所以它会是这样的吗? :

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

1 个答案:

答案 0 :(得分:0)

由于两个数据表来自不同的源,您需要将两个数据表提取到内存中,然后使用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;