1

Accessデータベースからデータを取得するためにRightOuterJoinクエリを作成したいのですが。このクエリをC#で実装するにはどうすればよいですか?このようにやってみました

connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=Sample1.accdb; Jet OLEDB:Engine Type=5";

string sql = "SELECT t1.mobileno,t1.RetailerNo,t1.custcode,t2.RET NO FROM [C:\\Sample1.accdb].[Table1] as t1 RIGHT OUTER JOIN [C:\\Sample1.accdb].[Table2] as t2 ON t1.RetailerNo = t2.RET NO";


database = new OleDbConnection(connectionString);
database.Open();
OleDbCommand cmd1 = new OleDbCommand(sql, database);
OleDbDataAdapter da = new OleDbDataAdapter(cmd1);

//database.Open();
//conn.Open();
cmd1.ExecuteNonQuery();
System.Data.DataTable dt = new System.Data.DataTable();
da.Fill(dt);
4

2 に答える 2

1

接続文字列に問題があると思います。Jetプロバイダーを使用しますが、データベースタイプは新しいACCDB形式です。JetはACCDBでは機能しません。

ACCDBの場合、ACEプロバイダーが必要です。Office 2007または2010がインストールされていない場合は、AccessDatabaseEngine再頒布可能パッケージをダウンロードしてインストールできます。

動作中の接続文字列のプロバイダーセクションは次のとおりです。

Provider=Microsoft.ACE.OLEDB.12.0

詳細については、Access2007の接続文字列を参照してください。

への接続が機能するようになっSample1.accdbたら、SQLステートメントを次のように修正します。

SELECT t1.mobileno,t1.RetailerNo,t1.custcode,t2.[RET NO]
FROM 
    Table1 as t1
    RIGHT JOIN Table2 as t2
    ON t1.RetailerNo = t2.[RET NO]

ノート:

  1. すでにに接続しているのでSample1.accdb、テーブル名の前にdbファイルへのパスを付ける必要はありません。
  2. スペース(RET NO)を含むフィールド名の場合は、フィールド名を角かっこで囲みます。
于 2012-07-23T06:01:13.317 に答える
0

次のコードを試してください

select * from tblemp right join tblDept on tblemp.DeptId=tblDept.pkDeptId

これは、SQLSERVERで右結合を使用する場合と同じです。

于 2012-07-23T05:29:24.637 に答える