2017-07-19 119 views
2

我需要检查一个表(表1)中是否添加了某些内容,如果需要,我需要从该表中取一些值并将其插入第二个表(表2) 。 问题是表1是通过OleDbConnection连接的.DBF Provider = VFPOLEDB.1,而第二个表2是通过SqlConnection连接的MSSQL表。c#结合来自两个不同数据库提供商的两个结果

我想让这样的事情: SELECT列1 FROM表1 WHERE列1 NOT IN(SELECT列2 FROM表2)

是否有可能做到这一点?我可以通过做加载两个表到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) 

回答

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; 
+0

谢谢你的回答。我会对此进行测试,但我以前从未使用过Linq,所以你可以进一步解释这一点吗?我如何使用它,我应该使用什么提供者或DataAdapter来填充数据集?我想要显示在新的DataGridView中传输。 – RobaQ

+0

你已经有2种方法获取datatables.get 2个数据表使用这些方法,然后LINQ查询将给你你想要的数据。最终绑定查询到你的数据网格。 – ClearLogic

+0

好的,但是当我制作时: 'dvgTest.DataSource = datatable1;' 我得到一个DataTable1结果,并没有问题。 datatable2相同。但是当我在LINQ中更容易一些: 'var query = from datatable2.AsEnumerable() select c; dvgTest.DataSource = query;' 我不会得到任何结果。为什么? – RobaQ

相关问题