- - PR -
データベースから読み出してきたデータがNULLだった場合の対処方についてご相談
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-09-22 10:53
C#でWEBアプリケーションを作成している者です。
データベースから読み出してきたデータを、DataTableオブジェクトに格納し、その1行目の各列のデータを変数に格納するという処理を作っていました。 疑問に思ったのは、データがNULLだった場合、どのように対処するべきか、という事です。 データが文字列型である場合には、ToString()メソッドを使えばNULLだった場合には長さ0の文字列が返されます。例えば、こんな感じで問題無いはずです。 string temp = testTable.Rows[0]["NAME"].ToString(); ただ、データが数値型で、decimal型の変数に格納しようとした場合には、キャスト行わないといけません。その場合、ただキャストをしただけではデータがNULLだった場合に例外が発生します。例えば以下のような処理です。 decimal temp = (decimal)testTable.Rows[0]["ID"]; こんな場合、皆さんならどのように対処しますか? 私が今考えているのは、DBNullと比較して、同一であれば0を格納するように処理を加えようと考えているのですが、どうもゴチャゴチャしてしまい、それが最善の策には思えません。他にもっといい方法がある気がするのです。 どなたか、他に方法をご存知無いでしょうか?それとも、私が考えている方法くらいしか無いのでしょうか? |
|
投稿日時: 2003-09-22 11:11
ぱっと思いつくのは・・・
1.SQLでisNull等で変換しておく 2.if isDbNull で処理分岐 3.as で 変換し変換できたか判断 4.try catchする こんな感じでしょうか 私は主に1.を使っています。 ちなみに4.はお勧めしません) |
|
投稿日時: 2003-09-22 14:46
NYRLさん、ありがとうございます。
やはり一つ処理を入れるか、SQL文で工夫する必要があるのですね。 ちょっと考えて、やりやすい方法を検討してみます。私の場合、2番が一番やりやすそうですね。 あと、Try〜Catchがお勧めできない理由は何なのでしょうか?ぱっっと思いつかないのですが・・・。他の処理でも結構多用しているので、少し不安です。 |
|
投稿日時: 2003-09-22 15:08
try〜catchがお勧めできないのはかなり主観とか好みが入りますが
一番大きいのは私がJavaやってたからかな .netだとこまかく検証してないのですが少なくてもjavaではtry〜catch は isnullとかに比べるとコストが大きい処理でした。 そのため避けてきましたが昔の話なので今.net でどうなっているかは 実際図ってみないと正直分からないのですが スタンスとして想定できる処理に対しては事前に判定等(1.〜 3.)をし 頻度の低い例外処理のみtry〜catchでやるというスタンスです。 [余談] ちなみにtry〜catchは主にファイルの入出力などでfinallyとセットで使ってます。 [/余談] でこのようなデータにNULLが入る場合は大体は複数レコードに渡って同様の処理が入るので SQLで一括で変換したほうが経験上は速かったので1.をお勧めしました。 |
1