第一個範例

Dapper 支援多種資料庫,本篇以 MySQL 做為示範。

讀者需事先自行安裝好 MySQL。

安裝完 MySQL 之後,接著建立資料庫。

再建立資料表。

導入專案

1. 安裝 NuGet 套件

必須同時安裝兩個套件:

  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 執行三步驟

  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)

第一個範例

Previous:
Next:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *