挿入

Dapper 挿入処理

  1. Dapper は Execute() 拡張メソッドを提供しており、INSERT・UPDATE・DELETE のSQLを実行し、影響を受けた行数(int)を返却します。
  2. 挿入の考え方:パラメータプレースホルダー @パラメータ名 を記述した INSERT 文を手書きし、エンティティオブジェクトを渡して自動的にパラメータをマッピング、SQLインジェクションを防ぎます。
  3. 記述ルール: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)

補足

  1. パラメータマッピングの仕様
    Dapper はエンティティのプロパティ名からSQLの @xxx パラメータへ自動で紐付けます。大文字小文字は区別されませんが、名前を統一することを推奨します。
  2. Execute の戻り値
    int rowsAffected = db.Execute(sql, stu);
  • 戻り値 ≥1:挿入成功;
  • 戻り値 0:データが1件も挿入されていない。
  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)

挿入

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です