豚吐露@wiki

パラメータにnullを使いたい時の注意

最終更新:

ohden

- view
管理者のみ編集可

パラメータにnullを使いたい時の注意

Windows 7 Professional
Visual Studio 2013 Professional
Dapper dot net 1.38

普通にやってもbuild errorや例外で怒られる。(´・ω・`)
int cnt = db.Database.Connection.Execute(sql, new { hoge = null });
エラー 107 <null> を、匿名型プロパティに割り当てることはできません C:\wk\tmp\hoge\Controllers\HomeController.cs 46 69 HogePj
とか
int cnt = db.Database.Connection.Execute(sql, new { hoge = DBNull.Value });
The member hoge of type System.DBNull cannot be used as a parameter value
とか、上手く行きません。

これ上手いことやるコツは簡単な事だった。(´・ω・`)
つぅか、冷静に考えたら当然の事なんじゃが...

int cnt = db.Database.Connection.Execute(sql, new { hoge = (string)null });
とか
int cnt = db.Database.Connection.Execute(sql, new { hoge = (int?)null });
とかキャストしてやるだけ。
気付いたら、あぁなるほどじゃが...確かにnullからじゃ型を推測できんもんねぇ...(´・ω・`)

  • DapperでNULLを扱いたい場合のNULLは、C#の『null』で良い。DBNullとか使う必要は無い。
  • パラメータの型は全部var(型推論)なので、ただの『null』だと型が分からない。
  • 型が分からなければ、明示的にキャストして教えてあげれば良い。
  • 『string』はnullableだけど、『int』『DateTime』はnullableでないので、『int?』『DateTime?』を使ってキャストしてやる。
  • 『int?』『DateTime?』は『Nullable<int>』『Nullable<DateTime>』と同じ意味。




更新日: 2014年12月02日 (火) 18時14分03秒

名前:
コメント:

すべてのコメントを見る
記事メニュー
目安箱バナー