端くれプログラマの備忘録 C# [C#] Dapperを使ってMS-Accessのデータベースを操作する

[C#] Dapperを使ってMS-Accessのデータベースを操作する

MS-Accessのデータベースを操作する簡単なアプリをC#で書きたい。なぜC#なのかというと、自分はC#に慣れているから。たぶんVBのほうがサンプルはいろいろありそうだけど、VBはほとんどやったことが無いので。

.NETの適当なクラスを使って書くんだろうなーと思ってネットを検索してみたら、Dapperというフレームワークを使うと楽らしい。

StackExchange/dapper-dot-net · GitHub
https://github.com/StackExchange/dapper-dot-net

ちょっと試してみる。

サンプルアプリ

環境はVisual Studio 2013。DapperはNuGet Package Managerを使ってプロジェクトに追加できる。

1. 新規プロジェクトを作成 (C# – Windows Forms Applications)。

2. [TOOLS]-[NuGet Package Manager]-[Manage NuGet Packages for Solutions…]メニューを選択。

0008

3. 右ペインで[Online]を選択し、左上のサーチボックスに”Dapper dot net”と入力。

0009

4. [Install]ボタンを押下してDapper dot netをインストール。

0010

5. [Close]ボタンを押下してダイアログボックスを閉じる。

するとSolution ExplorerのReferencesにDapperが追加されているはず。

0011

6. テストに使うデータベースに合わせて適当にコードを書く。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Dapper;

namespace Updater
{
    public class Connection
    {
        public string ConnectionString { get; private set; }
        public Connection()
        {
            var path = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "data.mdb");
            ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path;
        }
    }
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (var conn = new System.Data.OleDb.OleDbConnection(new Connection().ConnectionString))
            {
                conn.Open();

                // Look for the records.
                var sql = @"SELECT * FROM users WHERE name like @ItemName";
                var param = "%Suzuki%";
                var rows = conn.Query(sql, new { ItemName = param }).ToList();
                Console.WriteLine("count = {0}", rows.Count);
                foreach (var row in rows)
                {
                    Console.WriteLine(row.name);
                }

                // Update the record.
                sql = @"UPDATE backOrders SET arrival = '2/5/2015' WHERE id = @Id AND arrival IS NULL";
                var count = conn.Execute(sql, new { Id = 123456 });
                Console.WriteLine("count = {0}", count);

                conn.Close();
            }
        }
    }
}

見通しが良いコードが書ける。いい感じ。

参考サイト

C# + MS Accessで、OLE DB接続にてDapperを使う – メモ的な思考的な
http://thinkami.hatenablog.com/entry/2014/06/17/045753

ORMとかdapper dot netについてお話させていただきました – きよくらの備忘録
http://kiyokura.hateblo.jp/entry/20131014/p1

参考までに、.NET標準のSystem.Data.OleDbを使った例が以下にある。

NonSoft – アクセスMDBを操作するサンプル(C#.NET)
http://homepage2.nifty.com/nonnon/SoftSample/CS.NET/SampleAccessMdb.html