準備
1. こちらを参考にして、Access 2007 用の Northwind.accdb を用意します。
2. Employees テーブルから、ID, Last Name, First Name の列を含めた Test クエリーを作成します。ID 列にパラメータ [@1] を設定します。
デザイン
1. フォーム (Form1) にボタン (button1) を配置します。
2. フォーム (Form1) にデータグリッドビュー (dataGridView1) を配置します。
サンプルコード (C#)
// 名前空間の追加 using System.Data.OleDb; // コード private void button1_Click(object sender, EventArgs e) { string sConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Northwind.accdb"; OleDbConnection oleConn = new OleDbConnection(sConn); OleDbCommand oleCmd = new OleDbCommand(); OleDbDataAdapter oleAdapter = new OleDbDataAdapter(); DataSet ds = new DataSet(); oleCmd.Connection = oleConn; oleCmd.CommandText = "EXECUTE Test"; oleCmd.Parameters.Add("ID", OleDbType.Numeric); oleCmd.Parameters["ID"].Value = 5; oleAdapter.SelectCommand = oleCmd; oleAdapter.Fill(ds, "Test"); dataGridView1.DataSource = ds; dataGridView1.DataMember = "Test"; oleAdapter.Dispose(); oleCmd.Dispose(); oleConn.Dispose(); }
解説
Nwind.accdb の Invoices テーブルのからデータを抽出するクエリ (Invoices Filter) を使って、データを取得します。クエリは EXECUTE メソッドを使って実行します。クエリ名に空白文字が含まれている場合は、[...] で囲みます。
この Invoices Filter クエリはパラメータにより、抽出するデータを選択することができます。SQL の WHERE 句に相当します。
このようにパラメータを使って、クエリーを実行することをパラメータクエリーと言うようです。
OLEDB では、名前付きパラメータは無視されるようです。この例では 1 件のみ検索されるはずですが、全件取得されています。
また、Test クエリーを作成した理由ですが、既存のクエリーの実行ができなかったためです。不明なエラーであったり、Nz 関数が設定されたクエリーが認識できなかったりと原因は様々なようです。
結果
動作確認環境
Visual Studio 2015 Professional (C# 6.0)