C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ASP.NET 2.0 GridView のフッターでの合計


(過去ログ 20 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■8678 / inTopicNo.1)  ASP.NET 2.0 GridView のフッターでの合計
  
□投稿者/ 大塚松治 (1回)-(2007/10/06(Sat) 12:33:59)
大塚松治 さんの Web サイト

分類:[ASP.NET (VB)] 

オブジェクトを DBNull から他のタイプにキャストすることはできません。

http://msdn2.microsoft.com/en-us/library/ms972833.aspx
を参考に合計を表示させていますが、上記のエラーがでます。

msgbox a
a = Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "UnitPrice"))

で順番に表の数字がでますが、でヌルがはいっているところにいくとエラーがでるのです。
どなたかご教授ください。



引用返信 編集キー/
■8681 / inTopicNo.2)  Re[1]: ASP.NET 2.0 GridView のフッターでの合計
□投稿者/ 大塚松治 (2回)-(2007/10/06(Sat) 14:14:24)
大塚松治 さんの Web サイト
とりあえず、かきのようにしたら動きました。

a = Convert.IsDBNull(DataBinder.Eval(e.Row.DataItem, "完了"))

If a = False Then
'MsgBox(sum) デバック用
kanryo += Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "完了"))
End If

もっと良い方法があるような気もします。

引用返信 編集キー/
■8688 / inTopicNo.3)  Re[2]: ASP.NET 2.0 GridView のフッターでの合計
□投稿者/ mあ (92回)-(2007/10/06(Sat) 22:42:21)
No8681 (大塚松治 さん) に返信
> もっと良い方法があるような気もします。

SQL に COALESCE( or NVL だっけ?) 使うとか?

NULL 許可なフィールドは NULL チェックするのが当然でしょう。

DBに格納されている「値」がプログラムにとって認識しておく必要が無いことが明白である場合に限り、
SQL側で プログラム側に NULL が来ないように加工して渡すことは許されるケースはあります。
ただ、加工(この場合は代替文字へ置き換え)ですから、データ改竄にあたることは注意する必要があります。


COALESCE は、可変引数で2個以上持ちます。1個目から NULL 判定していき、NULL じゃ無い最初の項目
を返却します。

ですので、君のプログラムの場合、最終的に、INT に変換する「数字の文字列」なので、
COALESCE(A.NUM_VALUE, '0') としておけば、とりあえず、A.NUM_VALUE が NULL でも、
最悪、INT へのコンバート時には、代替文字列の "0" が変換されるようになります。
よくあるケースでは、表の表示用に、
COALESCE(A.NUM_VALUE, '値なし')
COALESCE(A.NUM_VALUE, 'データなし')
COALESCE(A.NUM_VALUE, '*')
等ですね。


大抵、DBでNULL許可項目にはそれなりに意味があるので、単に「テーブルスペースがもったいない」
理由の場合には、代替文字で置換してしまうのが普通かと。プログラムで素直に NULL チェックする
のも王道ですけどね。

DBに入れるデータはプログラムからですが、SQL自身がそのデータを改竄してもOKかどうかは
設計によってまちまちですから、君の上に人が居るならば素直に聞いてみた方がいいですよ。





引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -