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


受け皿のクラスを作成する
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上のテーブルが以下の場合
列名 | 列の型 |
TestId | int |
ColumnName | varchar(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
});
}
}