[英]c# combine two results from two different database providers
我需要檢查是否在一個表(表1)中添加了某些內容,如果需要,則需要從該表中獲取一些值並將其插入第二個表(表2)中。 問題在於,表1是通過OleDbConnection連接的.DBF Provider = VFPOLEDB.1,第二個表2是通過SqlConnection連接的MSSQL表。
我想做這樣的事情:從Table1中選擇SELECT column1不在其中的列1(從Table2中選擇SELECT 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];
}
對於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。 也許我可以從該查詢中獲取2個數據集或類似臨時表的內容? 所以會是這樣嗎? :
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.