0

Access データベースから 2 つのテーブルを読み取っている 2 つのデータセットがあります。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();
     }

これに可能な解決策があるかどうか疑問に思っていたので、一致する式のみが保持されます。どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

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);

これにより、それらの一致が得られるはずです。このコードは、2 つの異なるキーワードを持つ両方のテーブルであるすべての SN を提供します。

于 2013-07-24T17:53:23.840 に答える
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);
        }
于 2013-07-24T18:04:52.093 に答える