Dapper 支援多種資料庫,本篇以 MySQL 做為示範。
讀者需事先自行安裝好 MySQL。
安裝完 MySQL 之後,接著建立資料庫。
再建立資料表。
導入專案
1. 安裝 NuGet 套件
必須同時安裝兩個套件:
- Dapper(輕量級 ORM 核心函式庫)
Install-Package Dapper
- 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 執行三步驟
- 建立
IDbConnection資料庫連線物件(MySqlConnection / SqlConnection) - 手動撰寫 SQL 語句實現 CRUD
- 將 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)
第一個範例