* Dapper 応用 [#r9fcd89e]

** 匿名型に結果を詰める [#v607c46e]
 var dsn = "Server=server01;Port=5432;User Id=taro;Password=mypass;Database=mydb";
 var cn = new NpgsqlConnection(dsn);
 cn.Open();
 var all = cn.Query(@"SELECT * FROM t1");

** 指定した型に結果を詰める [#t9b6b4b3]
 
 public class MyEntity
 {
     public int Id { get; set; }
     public string Name { get; set; }
 }

 var all = cn.Query<MyEntity>(@"SELECT * FROM t1");

** プリペアドステートメントで動的なパラメータを引数にする [#m105a42b]

 DynamicParameters p = new DynamicParameters();
 //DynamicParameters p = new DynamicParameters(dict);
 p.Add("age", 10);
 var sql = @"SELECT * FROM user WHERE " + String.Join(" AND ", where);
 var rows = con.Query(sql, p);

http://stackoverflow.com/questions/9481678/how-to-create-arguments-for-a-dapper-query-dynamically

** シングルカラム [#o95f63f8]
 var count = (int) con.Query<Int64>(@"SELECT COUNT(*) AS count FROM t1").Single();

** 結果セットを返さないクエリの実行 [#v1b95d42]
 var numOfRows = con.Execute("UPDATE t1 foo = @foo WEHRE @id > 10", new { id = 10, foo = 1 });

** トランザクション [#q54689d8]
 try
 {
     using (var tran = con.BeginTransaction())
     {
         try 
         { 
             con.Execute("insert into t1 values (1, 'ABC');");
             tran.Commit();
         }
         catch
         {
             tran.Rollback();
         }
     }
 }
 finally
 {
     con.Execute("drop table t1");
 }


** プリペアドステートメントでのLIKE演算子 [#nd198e29]
 users = cn.Query(@"SELECT * FROM user WHERE name LIKE @name LIMIT 10", new { name = '%' + val + '%'});
または
 users = cn.Query(@"SELECT * FROM user WHERE name LIKE '%' || @name || '%' LIMIT 10", new { name = val });
- 但し、検索対象の値(この場合val)に%等の文字列が含まれている場合はエスケープ処理をする方がより良い。
- http://stackoverflow.com/questions/10563077/dapper-like-query-for-mysql-safe-against-sql-injection?rq=1

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS