- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- dotNet/Dapper/基本 へ行く。
Dapper
匿名型に結果を詰める
var dsn = "Server=hv-cent01;Port=5432;User Id=taro;Password=mypass;Database=mydb"; var cn = new NpgsqlConnection(dsn); cn.Open(); var all = cn.Query(@"SELECT * FROM t1");
指定した型に結果を詰める
public class MyEntity { public int Id { get; set; } public string Name { get; set; } }
var all = cn.Query<MyEntity>(@"SELECT * FROM t1");
プリペアドステートメントで動的なパラメータを引数にする
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
シングルカラム
var count = (int) con.Query<Int64>(@"SELECT COUNT(*) AS count FROM t1").Single();
結果セットを返さないクエリの実行
var numOfRows = con.Execute("UPDATE t1 foo = @foo WEHRE @id > 10", new { id = 10, foo = 1 });
トランザクション
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演算子
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