プログラム

SQLServerにC#でアクセスする(Dapper版)

以前、SQLCommand版を紹介しましたが、今回はDapperというライブラリを使用したものになります。使い方は以前紹介したものとあまり変わりませんが、データの扱い方が変わります
また、connectionStringは以下で作成したものと同じものを使用しています

前回の記事
SQLServerにC#でアクセスする(SqlCommand版) - ナストンのまとめ
SQLServerにC#でアクセスする(SqlCommand版) - ナストンのまとめ

これまでSQLサーバーにC#でアクセスしたことがなく、そのやり方を勉強した際に使用したものです。今回はSQLComman ...

続きを読む

Dapperをインストールする

DapperをNugetからインストールします

「Dapper」と検索して、画像のようなロゴになっているものをDLする

受け皿のクラスを作成する

SQLからデータ受け渡し用のクラスを作成します

// クラスのコンストラクタに引数を設定
public class BooksTableEntity
{
    public BooksTableEntity(int bookId, string bookName, int bookISBN)
    {
        BookId = bookId;
        BookName = bookName;
        BookISBN = bookISBN;
    }

    public int BookId { get; set; }

    public string BookName { get; set; }

    public int BookISBN { get; set; }
}

Dapperの注意点

Dapperを使用する上で注意する点があり、それはクラスのインスタンスに受け取るテーブルと同じ名前でないとエラーとなります

例:
SQL上のテーブルが以下の場合

列名列の型
TestIdint
ColumnNamevarchar(250)
// 上記のテーブル用の受け皿となるクラス(OK)
public class TestTableEntity
{
    public TestTableEntity(int testId, string columnName)
    {
        TestId = testId;
        ColumnName = columnName;
    }

    public int TestId { get; set; }

    public string ColumnName { get; set; }
}

// 上記のテーブル用の受け皿となるクラス(NG)
// 引数に_(アンダーバー)がついている
public class TestTableEntity
{
    public TestTableEntity(int _testId, string _columnName)
    {
        TestId = _testId;
        ColumnName = _columnName;
    }

    public int TestId { get; set; }

    public string ColumnName { get; set; }
}

この罠に気付くのにそこそこ時間を要しました

Sqlに情報を追加する

データベースにデータを登録します
SQLCommandと違う点はcommand.Parameters.AddWithValueでないことだけであまり変わらない印象です

public void Insert_Dapper(BooksTableEntity _booksTableEntity)
{
    string sql = @"
insert into BooksTable
(BookId,
BookName,
BookISBN)
values
(
 @BookId,
 @BookName,
 @BookISBN
)
";

    using (var connection = new SqlConnection(connectionString))
    {
        connection.Execute(sql,
            new
            {
                BookId = _booksTableEntity.BookId,
                BookName = _booksTableEntity.BookName,
                BookISBN = _booksTableEntity.BookISBN
            });
    }
}

Sqlの情報を取得する

データベースに登録されているデータを取得します
SQLCommandと比べるとかなりすっきりとした書き方となります

public void Read_Dapper()
{
    var sql = @"
select BookId,
       BookName,
       BookISBN
from BooksTable
";

    using (var connection = new SqlConnection(SqlServerHelper.connectionString))
    {
        // Dapperクラスを使用
        // クラスのコンストラクタとSQLの列名が同じである必要がる
        // 同じでないとエラーとなるの注意
        var result = connection.Query<BooksTableEntity>(sql).ToList();
        foreach(var item in result)
        {
            Console.WriteLine(string.Format("BookId:{0} BookName:{1}, BookISBN:{2}", item.BookId, item.BookName, item.BookISBN));
        }
    }
}

Sqlの情報を更新する

データベースに登録されているデータを更新します
更新対象のデータが存在しない場合は、データを作成しています。こちらもSQLCommandと比較してデータ作成時と同様であまり変わりません

public void Update_Dapper(BooksTableEntity _booksTableEntity)
{
    string sql = @"
update BooksTable
set BookName = @BookName,
    BookISBN = @BookISBN
where BookId = @BookId
";

    using (var connection = new SqlConnection(SqlServerHelper.connectionString))
    {
        var updateCount = connection.Execute(sql,
            new
            {
                BookId = _booksTableEntity.BookId,
                BookName = _booksTableEntity.BookName,
                BookISBN = _booksTableEntity.BookISBN
            });
        if (updateCount < 1)
        {
            Insert_Dapper(_booksTableEntity);
        }
    }
}

Sqlの情報を削除する

データベースに登録されているデータを削除します
こちらもSQLCommandと比較してデータ作成時と同様であまり変わりません

public void Delete_Dapper(int _bookId)
{
    string sql = @"
delete BooksTable
where BookId = @BookId
";

    using (var connection = new SqlConnection(SqlServerHelper.connectionString))
    {
        connection.Execute(sql,
            new
            {
                BookId = _bookId
            });
    }
}

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社
アドバンスド・ソリューション株式会社

アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...

サイトへ移動

お問い合わせ
お問い合わせ  | アドバンスド・ソリューション株式会社
お問い合わせ | アドバンスド・ソリューション株式会社

お問い合わせはこちら

-プログラム
-, ,