C# で OleDbDataReader を使って MS Access から値を取得する

MS Access のテーブルから値を取得する

今回は C# で MS Access ファイル (.accdb) のテーブルから、OleDbDataReader を使って値を取得してみましょう。


次のような二つの Test1.accdb と Test2.accdb という名前の MS Access ファイルがあります。

どちらも Students という名前のテーブルに以下のようなデータがはいっています。

Test1.accdb
C# で MS Access から値を取得する 1

Test2.accdb
C# で MS Access から値を取得する 2

Test2.accdb のほうはパスワードで制限がかけられています。

C# で MS Access から値を取得する 3

これらの MS Access ファイルの Students テーブルから値を取得してみましょう。


MS Access への接続文字列

まず、MS Access への接続文字列は次のようになります。

  • Data Source=[MS Access ファイルへのパス]
  • Jet OLEDB:Database Password=[データベースのパスワード]

パスワードでデータベースへのアクセスが制限されていない場合

connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Test\\C#\\MSAccess\\Test1.accdb"

パスワードでデータベースへのアクセスが制限されている場合

connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Test\\C#\\MSAccess\\Test2.accdb;Jet OLEDB:Database Password=MyPassword"

これを 「 データベースの接続文字列を App.config から取得する 」 の方法で App.config に置いて、接続文字列を使う準備をしておきます。

<connectionStrings>
    <add name="DB1" 
         connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Test\\C#\\MSAccess\\Test1.accdb" />
    <add name="DB2" 
         connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Test\\C#\\MSAccess\\Test2.accdb;Jet OLEDB:Database Password=MyPassword" />
  </connectionStrings>
</pre>

C# で MS Access から値を取得する 4

OleDbDataReader を使って MS Access から値を取得する

OleDbDataReader を使ってデータベースから取得したデータを読んで、コンソールに書き出してみましょう。

MS Access データベースの Students テーブルから、StudentID, FirstName, LastName を取得するコードは以下の通りです。

string connString = ConfigurationManager.ConnectionStrings["DB2"].ConnectionString;
string queryString = "SELECT StudentID, FirstName, LastName FROM Students;";

using (OleDbConnection conn = new OleDbConnection(connString))
{
	var comm = new OleDbCommand(queryString, conn);
	conn.Open();
	
	using (OleDbDataReader dr = comm.ExecuteReader())
	{
	    while (dr.Read())
	    {
	        Console.WriteLine(string.Format("{0}: {1} {2}",
	                                        dr["StudentID"],
	                                        dr["FirstName"],
	                                        dr["LastName"]));
	    }
	}
}

C# で MS Access から値を取得する 5


OleDbDataReader を使うには System.Data.OleDb、config ファイルから値を取得するのに System.Configuration が必要ですので、using ディレクティブで追加しておきます。


このコードで行っている処理の流れは次の通りです。

  1. 接続文字列をコンストラクターに渡して OleDbConnection を生成する。
  2. アドホック・クエリとコネクションをコンストラクターに渡して OleDbCommand を生成する。
  3. コネクションを open する。
  4. OleDbCommand の ExecuteReader メソッドを呼んで、OleDbDataReader を生成する。
  5. OleDbDataReader の Read メソッド を While ループで実行することで、1 行ずつ読み込む。
  6. 読んだ行をコンソールにフォーマットして書き出す。

OleDbConnection や OleDbDataReader は using ステートメントを使っておかないと、Exception でコードパスが飛んだ時に、Close し忘れる可能性がでてきてしまいますので、using を使います。

OleDbDataReader の Read メソッドはまだ行がある時は true、もうない時は false を返してくれるので、While(dr.Read()) としておけば 全行読み終わった時点で while ループを抜けてくれます。

SqlDataReader の時とほとんど一緒ですね!


こちらが上のコードの ConnectionStrings を DB1、DB2、と変更して実行した結果です。

Test1.accdb
C# で MS Access から値を取得する 6

Test2.accdb
C# で MS Access から値を取得する 7

© 2024 C# 入門