Dapper 挿入処理
- Dapper は
Execute()拡張メソッドを提供しており、INSERT・UPDATE・DELETE のSQLを実行し、影響を受けた行数(int)を返却します。 - 挿入の考え方:パラメータプレースホルダー
@パラメータ名を記述したINSERT文を手書きし、エンティティオブジェクトを渡して自動的にパラメータをマッピング、SQLインジェクションを防ぎます。 - 記述ルール:
INSERT INTO テーブル名(カラム1,カラム2...) VALUES(@パラメータ1,@パラメータ2...)
サンプルコード
using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;
using System.Collections.Generic;
namespace DapperDemo
{
class Program
{
static void Main(string[] args)
{
// 1.接続文字列の読み込み
var connStr = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;
// 2.using文でデータベース接続を自動解放
using (IDbConnection db = new MySqlConnection(connStr))
{
// 3.studentテーブルへ挿入するSQLを定義
string sql = @"INSERT INTO student (FirstName, LastName, Email)
VALUES (@FirstName, @LastName, @Email)";
// 4.エンティティオブジェクトを作成
var stu = new Student()
{
FirstName = "foxdevelop",
LastName = "com",
Email = "admin@foxdevelop.com"
};
// 5.挿入を実行、影響行数を取得
int rows = db.Execute(sql, stu);
// 6.クエリで登録データを確認
List<Student> stuList = db.Query<Student>("SELECT * FROM student").ToList();
}
Console.ReadKey();
}
}
// Studentエンティティクラス(プロパティ名はSQLの@パラメータ名と一致させる)
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
}Code language: HTML, XML (xml)
補足
- パラメータマッピングの仕様
Dapper はエンティティのプロパティ名からSQLの@xxxパラメータへ自動で紐付けます。大文字小文字は区別されませんが、名前を統一することを推奨します。 - Execute の戻り値
int rowsAffected = db.Execute(sql, stu);
- 戻り値 ≥1:挿入成功;
- 戻り値 0:データが1件も挿入されていない。
- 接続文字列の設定(App.config)
<configuration>
<connectionStrings>
<add name="StudentConnection"
connectionString="server=localhost;database=testdb;uid=root;pwd=123456"
providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
</configuration>Code language: HTML, XML (xml)
追加レコードの自動採番主キーIDを取得する(MySQL)
studentテーブルに自動インクリメント主キー Id が存在する場合、新規登録した行のIDを取得します:
string sql = @"INSERT INTO student (FirstName, LastName, Email)
VALUES (@FirstName, @LastName, @Email);
SELECT LAST_INSERT_ID();";
long newStudentId = db.ExecuteScalar<long>(sql, stu);Code language: HTML, XML (xml)
挿入