未分類

C# Access 2010 からクエリーを使ってデータを抽出する

準備

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)

-未分類