我有两个数据集,我在Access数据库的两个表中读取。我希望能够通过EXPRESSION匹配数据,以便保持所有匹配的“SN”并摆脱那些没有匹配的数据。到目前为止,我的代码保留了所有的“SN”。在这里,
con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+filePath);
con3 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+filePath);
if ((string)comboBox1.SelectedItem == "CGA0112")
{
try
{
string end = "ENDDATE";
string qual = "CGA0112";
string start = "START";
ad.SelectCommand = new OleDbCommand("SELECT b.RSV_CAT, b.SEQNUM, b.LEASE,
b.WELL_ID, a.QUALIFIER, a.KEYWORD, a.EXPRESSION
FROM [AC_ECONOMIC] a INNER JOIN [AC_PROPERTY] b
on a.PROPNUM=b.PROPNUM WHERE a.KEYWORD = '" +end+ "'
AND a.QUALIFIER = '" +qual+ "' AND a.EXPRESSION LIKE 'SN%'", con);
ds.Clear();
ad.Fill(ds);
con.Open();
ad.SelectCommand.ExecuteNonQuery();
con.Close();
ad3.SelectCommand = new OleDbCommand("SELECT b.RSV_CAT, b.SEQNUM, b.LEASE,
b.WELL_ID, a.QUALIFIER, a.KEYWORD, a.EXPRESSION
FROM [AC_ECONOMIC] a INNER JOIN [AC_PROPERTY] b
on a.PROPNUM=b.PROPNUM
WHERE a.KEYWORD = '" + start + "' AND a.QUALIFIER = '" +
qual + "' AND a.EXPRESSION LIKE 'SN%'", con3);
ds3.Clear();
ad3.Fill(ds3);
ds.Merge(ds3); //merges the two datasets together
win1.frm1 = this;
win1.Show();
con3.Open();
ad3.SelectCommand.ExecuteNonQuery();
con3.Close();
}
我想知道是否有可能的解决方案,所以它只保留匹配的EXPRESSIONS。任何帮助深表感谢。谢谢。
答案 0 :(得分:0)
您是否正在尝试获取两个表中的所有SN?如果是这样你应该尝试像这样的子查询。
"SELECT b.RSV_CAT, b.SEQNUM, b.LEASE,
b.WELL_ID, a.QUALIFIER, a.KEYWORD, a.EXPRESSION
FROM [AC_ECONOMIC] a INNER JOIN [AC_PROPERTY] b
on a.PROPNUM=b.PROPNUM WHERE a.KEYWORD = '" +end+ "'
AND a.QUALIFIER = '" +qual+ "' AND a.EXPRESSION IN
(SELECT a.EXPRESSION FROM [AC_ECONOMIC] a INNER JOIN [AC_PROPERTY] b on
a.PROPNUM=b.PROPNUM WHERE a.KEYWORD = '" + start + "' AND a.QUALIFIER = '" + qual
+ "' AND a.EXPRESSION LIKE 'SN%'", con3);
这应该给你那些比赛。这段代码将为您提供所有SN,这两个表都包含两个不同的关键字。
答案 1 :(得分:0)
这是一个例子。由于“SN456”出现在两个表中,因此会在结果中选择它。
var ds = new DataSet();
var table1 = ds.Tables.Add("Table1");
table1.Columns.Add("Expression", typeof (string));
table1.Rows.Add("SN123");
table1.Rows.Add("SN456");
table1.Rows.Add("SN789");
var table2 = ds.Tables.Add("Table2");
table2.Columns.Add("Expression", typeof (string));
table2.Rows.Add("SN000");
table2.Rows.Add("SN456");
table2.Rows.Add("SN999");
var table1Rows = table1.AsEnumerable();
var table2Rows = table2.AsEnumerable();
var matches = table1Rows.Join(table2Rows, l => l["Expression"], r => r["Expression"], (l, r) => l["Expression"]);
foreach (var match in matches)
{
Console.WriteLine(match);
}