Dapperでパラメーターを使用してみます。
ソースコード
Person.cs
using System.Text; namespace DapperSample { class Person { public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } public override string ToString() { StringBuilder b = new StringBuilder(); b.AppendFormat("ID:[{0}] ", this.ID); b.AppendFormat("Name:[{0}] ", this.Name); b.AppendFormat("Age:[{0}] ", this.Age); return b.ToString(); } } }
Program.cs
Queryメソッドの第2引数でパラメーターを渡します。仮引数の型はobjectなので、実引数には自分で定義したクラスのインスタンスを渡すことができます。
プロパティ名をパラメーター名に合わせる必要があります。
using Dapper; using System; using System.Data.SqlClient; namespace DapperSample { class Parameters { public int Age { get; set; } } class Program { static void Main(string[] args) { using (SqlConnection connection = new SqlConnection([接続文字列])) { connection.Open(); var persons = connection.Query<Person>( "SELECT ID, Name, Age FROM dbo.Persons WHERE Age = @Age ORDER BY ID", new Parameters() { Age = 20 }); foreach (Person person in persons) { Console.WriteLine(person); } } Console.ReadKey(); } } }
動作結果
パラメータークラスを匿名型にする
パラメーター用のクラスを毎回定義するのは面倒なので、匿名型にすることができます。これでも同じように動作します。
using Dapper; using System; using System.Data.SqlClient; namespace DapperSample { class Program { static void Main(string[] args) { using (SqlConnection connection = new SqlConnection([接続文字列])) { connection.Open(); var persons = connection.Query<Person>( "SELECT ID, Name, Age FROM dbo.Persons WHERE Age = @Age ORDER BY ID", new { Age = 20 }); foreach (Person person in persons) { Console.WriteLine(person); } } Console.ReadKey(); } } }