1

OleDb を使用して Access データベースにクエリを実行しています。次のクエリは Access で機能します (入れ子になった内部結合と多くのかっこで示されているように、Access は実際に設計 GUI からクエリを作成しました)。醜いテーブル/列名をお詫びします。

SELECT DISTINCT Table1.A, Table2.B, Table3.[C]
FROM (Table4 INNER JOIN (Table2 INNER JOIN Table1 ON Table2.ID = Table1.Table2ID) ON Table4.ID = Table1.Table4ID) INNER JOIN ((Table3 INNER JOIN Table5 ON Table3.ID = Table5.[Table3ID]) INNER JOIN Table6 ON Table3.ID = Table6.Table3ID) ON Table1.ID = Table6.Table1ID
WHERE (((Table1.D)=False) AND ((Table1.E)=True)))

多くの行を返します。ただし、次のコードでは空のデータ セットが生成されます。コードの設定方法が原因で構文エラーが発生する可能性があります (ラッパー クラスがこれらのコード行の一部を処理するため、簡単にするためにそれを解明する必要がありました)。

// db initialized prior
OleDbConnection con = new OleDbConnection(db);
con.Open();
OleDbCommand cmd = new OleDbCommand(@"
    SELECT DISTINCT Table1.A, Table2.B, Table3.[C]
    FROM (Table4 INNER JOIN (Table2 INNER JOIN Table1 ON Table2.ID = Table1.Table2ID) ON Table4.ID = Table1.Table4ID) INNER JOIN ((Table3 INNER JOIN Table5 ON Table3.ID = Table5.[Table3ID]) INNER JOIN Table6 ON Table3.ID = Table6.Table3ID) ON Table1.ID = Table6.Table1ID
    WHERE (((Table1.D)=False) AND ((Table1.E)=True)))
");
cmd.Connection = con;
DataSet data = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
adapter.Fill(data);

このようにデータベースで実行された他の選択クエリはデータを返しますが、なぜこれが空のデータセットを返すのでしょうか?

4

0 に答える 0