最初のサンプル

Dapperは多くのデータベースに対応しています。ここではMySQLを例に解説します。

事前にMySQLをインストールしておいてください。

MySQLのインストール後、データベースを作成します。

次にテーブルを作成します。

導入

1. NuGetパッケージのインストール

2つのパッケージを両方インストールする必要があります。

  1. Dapper(軽量ORMのコアライブラリ)
Install-Package Dapper
  1. MySql.Data(MySQLドライバ、MySqlConnectionを提供)

Dapper自体にはデータベースドライバが含まれていません。MySQLを利用するには別途ドライバのインストールが必須です。

2. データベーステーブル作成
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `StudentID` int NOT NULL AUTO_INCREMENT,
  `StudentName` text,
  `Age` int,
  `ClassName` text,
  PRIMARY KEY (`StudentID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;Code language: SQL (Structured Query Language) (sql)

C# エンティティクラス

テーブルのカラム名と合わせることでDapperが自動的にマッピングします。

public class Student
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public int Age { get; set; }
    public string ClassName { get; set; }
}Code language: C# (cs)

ルール:カラム名とプロパティ名は大文字小文字を区別せず、名前が一致すれば自動マッピングされます。

設定ファイル

App.config

元の画像の誤り修正:providerNameにOracleを指定しないでください。MySQLでは不要な設定なので削除して構いません。

接続文字列を設定します

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <connectionStrings>
    <add name="StudentConnection"
         connectionString="Server=localhost;Database=mydb;Uid=root;Pwd=root"/>
  </connectionStrings>
</configuration>Code language: HTML, XML (xml)

サンプルコード

using System;
using System.Collections.Generic;
using System.Data;
using Dapper;
using MySql.Data.MySqlClient;
using System.Configuration;

class Program
{
    static void Main(string[] args)
    {
        List<Student> studentList = new List<Student>();

        // 設定ファイルから接続文字列を読み込み
        string connStr = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;

        // 1. IDbConnection によるデータベース接続を作成
        using (IDbConnection db = new MySqlConnection(connStr))
        {
            // 2. SQLを記述、3.Dapper拡張メソッドでクエリ実行、エンティティへ自動マッピング
            string sql = "SELECT * FROM student";
            studentList = db.Query<Student>(sql).ToList();

            Console.WriteLine($"学生総数:{studentList.Count}");
        }
        Console.ReadKey();
    }
}Code language: C# (cs)

Dapper実行の3ステップ

  1. IDbConnection データベース接続オブジェクトを生成(MySqlConnection/SqlConnection)
  2. SQL文を手書きしCRUD処理を実装
  3. SQLとパラメータをDapper拡張メソッドへ渡す(Query/Execute)

SQLインジェクション

パラメータ化クエリを使用すればSQLインジェクションを完全に回避できます。
文字列を連結してSQLを作成するとインジェクションの脆弱性が発生します。

string sql = "SELECT * FROM student WHERE StudentID = @Id";
var stu = db.QueryFirstOrDefault<Student>(sql, new { Id = 1 });Code language: C# (cs)

最初のサンプル

コメントを残す

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