Build2017にて、.NET Core 2.0 Preview1の発表があったので、さっそくインストールしてみました。
続きを読む.NET Core SDK 1.0.4が公開されてた
Dapper.SqlBuilderでパラメータ指定するもう少しマシな方法
以前の投稿で、Dapper.SqlBuilderにパラメータを渡す際に、
var builder = new SqlBuilder(); var pageTemplate = builder.AddTemplate(pageSql); var countTemplate = builder.AddTemplate(countSql); if (userId.HasValue) { builder.Where($"t.[UserId] = @{nameof(userId)}"); } if(isDone.HasValue) { builder.Where($"t.[Done] = @{nameof(isDone)}"); } builder.OrderBy(string.Format("t.[Id] {0}", orderDesc ? "desc" : "asc")); using (var conn = new SqlConnection(connectionstring)) { var todos = conn.Query<TodoItem>(pageTemplate.RawSql, new { start, end, userId, isDone }); var count = conn.QueryFirst<int>(countTemplate.RawSql, new { userId, isDone }); }
のように書いていて、最後の無名オブジェクトがダサいなと思いつつも放置していました。
続きを読むDapper.SqlBuilderで膨大な数のレコードのページ表示を適応的にする
膨大な数のレコードをページ表示する際に、アプリケーション側にページサイズよりも大きい数のデータを読み込むことは効率的ではありません。
今回はDapper.SqlBuilderを用いてページ表示を効率化させてみます。
DapperのSQLプレースホルダをコーディングミスに強くする方法を考える
(追記アリ)
DapperのSQLプレースホルダでコーディングミスをしたので対応策の備忘録です。
文字列でのパラメータ指定が大嫌いなんです
DapperやADO.NETはSQL中に"@“から始まる文言を用いることでプレースホルダを表現できます。
例えば下記の例では”@userId"がプレースホルダとなり、"new {userId = 1}“にてパラメータを指定しています。
var sql = @" Select u.* From Users as u Where u.Id = @userId "; using (var conn = new SqlConnection(connectionstring)) { var user = conn.QueryFirstOrDefault<User>(sql, new { userId = 1}); }
今回は、この無名クラスのuserIdをタイポして実行時エラーとなりました。
System.Data.SqlClient.SqlException: 'Must declare the scalar variable "@userId".'
すぐに気が付くようなエラーなので大したことではなかったのですが、やはり実行時エラーは気に入りません。
静的型付言語を使っている以上コンパイル時に最大限エラーを発見したいものです。