C#でデータベースへ接続する(Microsoft Access編)

Microsoft AccessのデータベースにはOLEDBという仕組みを使う事で接続する事ができます。

OLEDBはMicrosoftが開発したAPIで、様々な種類のデータベースを同じようにアクセスする為の技術です。

 

ここでは、OLEDBを使ったAccessへの接続方法について解説します。


接続文字列を作成する

OLEDBは様々な種類のデータベースに対応したAPIですが、どの種類で何という名前のファイルへ接続するのかといった情報を1つの文字列にして指定する必要があります。

 

Microsoft Accessの場合、接続文字列の構成要素として以下の情報を指定します。

  • Provider          ・・・ データベースの種類(接続するデータベースがAccess形式である事を指定)
  • Data Source            ・・・ データベースのファイル名
  • Jet OLEDB:Database Password ・・・ データベースのパスワード(パスワードがかかっていない場合は省略可)

 

Providerの値

Microsoft Accessには2つの形式があります。

拡張子が「.accdb」となる新しい形式と、「.mdb」の古い形式です。

どちらの形式なのかによって Provider として指定する値を使い分ける必要があります。

 

それぞれ対応するProviderの値は以下の通りです。

  • .accdbの場合  ・・・ Microsoft.ACE.OLEDB.12.0
  • .mdbの場合    ・・・ Microsoft.Jet.OLEDB.4.0

OleDbConnectionStringBuilder クラスを使って接続文字列を作る

接続文字列は独自に作成しても構いませんが、構文を間違えずに作成する為に専用のクラスを使った方が良さそうです。

接続文字列を作成する為のクラス OleDbConnectionStringBuilder が用意されているのでそれを使いましょう。

 

以下のようにOleDbConnectionStringBuilderのインスタンスを作成し必要な情報をセットします。

var builder = new System.Data.OleDb.OleDbConnectionStringBuilder();
builder["Provider"] = "Microsoft.ACE.OLEDB.12.0";
builder["Data Source"] = "C:\\Sample.accdb";
builder["Jet OLEDB:Database Password"] = "acbdefg";

情報をセットすると「ConnectionString」プロパティに接続文字列が格納されます。

上記の例の場合、接続文字列は

 

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Sample.accdb;Jet OLEDB:Database Password=acbdefg

 

となります。


OLEDBでAccessへ接続する

OleDbConnection クラスを使ってデータベースへ接続します。

 

データベースは使い終わったら接続を終わらせる必要があります。

リソースの解放が直ぐに行われるよう、なるべくusingを使う事を心がけましょう。

 

参考「C#のリソース解放にはIDisposableとusingを使おう

var builder = new System.Data.OleDb.OleDbConnectionStringBuilder();
builder["Provider"] = "Microsoft.ACE.OLEDB.12.0";
builder["Data Source"] = "C:\\Sample.accdb";
builder["Jet OLEDB:Database Password"] = "acbdefg";

using (var conn = new System.Data.OleDb.OleDbConnection(builder.ConnectionString))
{
    //ココにデータベースにアクセスするコードを書く


}