* 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