読者です 読者をやめる 読者になる 読者になる

DataSetの怪

ASP.NET

VS2005のDataSetをごにょごにょいじっていると、謎の動作を発見。

NullなVARCHAR(n)の列を読むと"(Null)"という文字列が得られて、対処に困った。DataTableの列の定義を見ると、NullValueプロパティの値が(Null)になっている。一見、DBがNullなときにnullが返るように設定されているように見えるが、実はこの(Null)が曲者でソースを見ると文字列の"(Null)"になっている…

なめてやがる。

どうやら、このNullValueプロパティをダブルクリックで変更すると、(Null)とか(ThrowsException)とかが、そのまま文字列として「DBがNullだったときの値」に設定されてしまうみたい。きちんとプルダウンメニューを開いて選択すると大丈夫。って、そんな面倒なことちまちまやっとれんわ。だいたい、AllowDBNull=trueなのに、どうしてデフォルトで(Null)になっていないのか理解に苦しむ*1。ちなみに、ほんとに(Null)に設定できているときは、"_null"という文字列になるみたい。(手で"_null"と入れてみると、(Null)になった)

他にも気に入らない動作として、AllowDBNull=trueなintの列を.NETのint?で返すことができないみたいというのもある。ふざけてる。

結論:DataSetステ。SQL手書きだーーー

NHibernateとか使うって言う手もあるのかな

*1:のは、私がDBの常識を知らないだけなのかも