📝
【VB.NET】Dapperの使用方法まとめ
VB.NET と Dapper を用いたデータアクセスのガイド
Dapperとは
Dapperは、.NET用の軽量なオブジェクトリレーショナルマッパー(ORM)です。Stack Overflowチームによって開発され、パフォーマンスと開発者の生産性を重視して設計されています。DapperはADO.NETの機能を拡張し、データベース操作を簡単かつ効率的に行うことができます。SQLクエリの実行、結果セットのマッピング、パラメータの処理など、データベースアクセスに関連する多くの機能を提供します。
Dapperは、クエリの結果をPOCO(Plain Old CLR Object)に直接マッピングすることができ、LINQやEntity FrameworkなどのフルORMよりもシンプルで高速なデータアクセスを実現します。
Dapperの詳細については、以下の公式サイトを参照してください。
概要
このドキュメントでは、.NET Framework 4.8 と VB.NET を用いて、Dapper ORM を使用したデータベース操作の方法を詳細に解説します。具体的な操作例として、customer
テーブル(列:id
, name
, gender
, mail
)を用います。
モデルの定義
Public Class Customer
Public Property Id As Integer
Public Property Name As String
Public Property Gender As String
Public Property Mail As String
End Class
基本的なデータ取得
特定の条件に基づくデータの取得
Using conn As New SqlConnection(connectionString)
conn.Open()
Dim gender As String = "男性"
Dim customers As IEnumerable(Of Customer) = conn.Query(Of Customer)("SELECT * FROM customer WHERE gender = @Gender", New With {.Gender = gender})
End Using
パラメータを使った検索
Using conn As New SqlConnection(connectionString)
conn.Open()
Dim searchTerm As String = "%検索語%"
Dim customers As IEnumerable(Of Customer) = conn.Query(Of Customer)("SELECT * FROM customer WHERE name LIKE @SearchTerm", New With {.SearchTerm = searchTerm})
End Using
ソートと制限を伴うデータの取得
Using conn As New SqlConnection(connectionString)
conn.Open()
Dim customers As IEnumerable(Of Customer) = conn.Query(Of Customer)("SELECT TOP 10 * FROM customer ORDER BY name")
End Using
複数のテーブルからのデータ取得
Using conn As New SqlConnection(connectionString)
conn.Open()
Dim query As String = "SELECT c.*, o.OrderDate FROM customer c INNER JOIN orders o ON c.id = o.CustomerId"
Dim customerOrders As IEnumerable(Of CustomerWithOrders) = conn.Query(Of CustomerWithOrders)(query)
End Using
ダイナミッククエリの実行
Using conn As New SqlConnection(connectionString)
conn.Open()
Dim dynamicParams As New DynamicParameters()
dynamicParams.Add("@Gender", "男性")
dynamicParams.Add("@Name", "%名%")
Dim customers As IEnumerable(Of Customer) = conn.Query(Of Customer)("SELECT * FROM customer WHERE gender = @Gender AND name LIKE @Name", dynamicParams)
End Using
IN句を使用したデータの取得
Using conn As New SqlConnection(connectionString)
conn.Open()
Dim ids As Integer() = {1, 2, 3}
Dim customers As IEnumerable(Of Customer) = conn.Query(Of Customer)("SELECT * FROM customer WHERE id IN @Ids", New With {.Ids = ids})
End Using
動的型でのデータ取得
基本的な動的型でのデータ取得
Using conn As New SqlConnection(connectionString)
conn.Open()
Dim customers As IEnumerable(Of Object) = conn.Query("SELECT * FROM customer")
For Each customer In customers
Console.WriteLine(customer.name)
Next
End Using
複数のテーブルから動的型でのデータ取得
Using conn As New SqlConnection(connectionString)
conn.Open()
Dim query As String = "SELECT c.*, o.OrderDate FROM customer c INNER JOIN orders o ON c.id = o.CustomerId"
Dim results As IEnumerable(Of Object) = conn.Query(query)
For Each result In results
Console.WriteLine($"{result.name} - {result.OrderDate}")
Next
End Using
データの挿入(Insert)
Using conn As New SqlConnection(connectionString)
conn.Open()
Dim newCustomer As New Customer With {.Name = "新しい顧客", .Gender = "男性", .Mail = "email@example.com"}
Dim result As Integer = conn.Execute("INSERT INTO customer (name, gender, mail) VALUES (@Name, @Gender, @Mail)", newCustomer)
End Using
データの更新(Update)
Using conn As New SqlConnection(connectionString)
conn.Open()
Dim existingCustomer As New Customer With {.Id = 1, .Name = "更新された顧客", .Gender = "女性", .Mail = "updated@example.com"}
Dim result As Integer = conn.Execute("UPDATE customer SET name = @Name, gender = @Gender, mail = @Mail WHERE id = @Id", existingCustomer)
End Using
Discussion