我需要检查是否添加了一个表(表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)
答案 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;