【C#】ODBC接続でAccessのデータを取得

AccessのデータはC#から取得して扱うことが可能です。
ODBC接続とOLEDB接続がありますが、本記事ではODBC接続での方法を記載します。

【検証環境】VisualStudio2019 / .NET Core3.1 / Access ver.2109 64bit 

Accessのテーブル準備

Accessにテーブルを準備します。例の如く、Personテーブルを作成します。
ファイルパス「D:TESTDatabase1.accdb 」

OdbcDataAdapter

Accessからデータ取得する方法の一つとして、DataAdapterを利用する方法があります。
DataAdapterは渡したSQLの結果をDataTableに格納することができます。

//接続文字列
string connectionString = @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=D:TESTDatabase1.accdb;";
var dataTable = new DataTable();
try
{
    using (var connection = new OdbcConnection(connectionString))
    {
        connection.Open();

        var sql = "SELECT * FROM T_Person WHERE 年齢 >= 25";
        using (var commnad = new OdbcCommand(sql, connection))
        {
            using (var adapter = new OdbcDataAdapter(commnad))
            {
                adapter.Fill(dataTable);
            }
        }
    }
    //DataTableはforeachできないので、AsEnumerableを使う
    foreach (var row in dataTable.AsEnumerable())
    {
        //DataRow["列名"]で値を取得
        var name = row["名前"];
        var age = row["年齢"];
        var bloodType = row["血液型"];
        Console.WriteLine($"{name} {age}歳 {bloodType}型");
        //本田翼 28歳 O型
        //戸田恵梨香 32歳 AB型
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

OdbcDataReader

Accessからデータ取得する方法の一つとして、DataReaderを利用する方法があります。
DataReader は渡したSQLの結果を1行ずつ読み込んで処理することができます。

//接続文字列
string connectionString = @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=D:TESTDatabase1.accdb;";
var dataTable = new DataTable();
try
{
    using (var connection = new OdbcConnection(connectionString))
    {
        connection.Open();

        var sql = "SELECT * FROM T_Person WHERE 年齢 >= 25";
        using (var commnad = new OdbcCommand(sql, connection))
        {
            using (var reader = commnad.ExecuteReader())
            {
                //1行ずつ読み込む
                while (reader.Read())
                {
                    //OdbcDataReader["列名"]で値を取得
                    var name = reader["名前"];
                    var age = reader["年齢"];
                    var bloodType = reader["血液型"];
                    Console.WriteLine($"{name} {age}歳 {bloodType}型");
                    //本田翼 28歳 O型
                    //戸田恵梨香 32歳 AB型
                }
            }
        }
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

Leave a Reply

Your email address will not be published. Required fields are marked *