- PR -

ADO.NETでの数値データの扱い

投稿者投稿内容
tabou
常連さん
会議室デビュー日: 2002/07/15
投稿数: 39
投稿日時: 2004-02-02 07:41
お世話になってます。

ADO.NETについての記事はたくさんあるのですが、
下記についての情報が得られません、教えてください。

pub_id、pub_noという2つのdouble型フィールドがあり
これらを使って計算するのに
foreach (DataRow dr in dt.Rows)
{
  double goukeio = dr["pub_id"] * dr["pub_no"]


などのようにとエラーがでてコンパイルが通りません。

これをキャストすると
foreach (DataRow dr in dt.Rows)
{
  double goukeio = (double)dr["pub_id"] * (double)dr["pub_no"]


のようにすると実行できるのですが
pub_id 又は pub_no が0のときキャスト出来ないと言うエラーでとまります。

このような場合どのようにすれば計算が出来るのか教えてください、
よろしくお願いします。





Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-02 09:57
 「ゼロ」ですか?「ヌル(またはDbNull.Value)」ではないですか?「ヌル」はキャストできないので、先に検査しておきます。
tabou
常連さん
会議室デビュー日: 2002/07/15
投稿数: 39
投稿日時: 2004-02-02 18:02
Jittaさんコメントありがとうございました。

データは確認して有りましてヌルでは有りません。

ゼロでもないとすれば別の原因があるということのようです

もう一度確認してみます、ありがとうございました。
kagura
常連さん
会議室デビュー日: 2003/03/26
投稿数: 27
投稿日時: 2004-02-03 12:47
試したところobject型をキャスト演算子でdoubleには出来ませんでした。
そのほかにもString→doubleも不可です
(0だろーが、1だろーが)
#VB.NETでは出来るんですけどねぇ・・・
----------
foreach (DataRow dr in dt.Rows)
{
  double goukeio = Convert.ToDouble(dr["pub_id"]) * Convert.ToDouble(dr["pub_no"]);
}
でどうでしょう。
NULL時の挙動もどこかに入れなければなりませんが。

[ メッセージ編集済み 編集者: kagura 編集日時 2004-02-03 14:08 ]
tabou
常連さん
会議室デビュー日: 2002/07/15
投稿数: 39
投稿日時: 2004-02-04 18:25
kagura さんコメントありがとうございました。

書籍等をいろいろ探して見たりしたのですが、この辺のところが出ていないので
結局よくわからないままです。
最終的にフィールドの定義から変更して(decimal) にて行いました。

みなさんどうしているんでしょうか??

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-02-04 19:35
すみません、ちょっとお聞きしたいんですが、
>最終的にフィールドの定義から変更して(decimal) にて行いました。
というのはどういった意味でしょうか。
フィールドをdoubleからdecimalに変えたということですか?

>kaguraさん
>String→doubleも不可です
キャストというのは、オブジェクトを別な型として参照するということです。
Stringオブジェクトはdoubleオブジェクトとして参照できませんので、もちろんキャストできません。
VB.NETのCtype()とかOption Strict Offの場合のアレとはちょっと違うんですよね。
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2004-02-04 19:37
基本的解決ではありませぬが、
以下の解決方法では、気分的には優れませんが
結果オーライ型で如何なもんでしょうか。

試していませんが、実際にゼロのときに
エラーが発生しているとします。

あるいは掛け算の対象値の一方あるいは双方がnullの場合も含めて、
どちらにしても期待する答えは
ゼロになってほしいのではないでしょうか。
(違っていたらすいません。)

とすれば、

foreachの中身をtry〜catchして

catch では goukeio = 0 ; としてしまえば・・・

甘いですか????


tabou
常連さん
会議室デビュー日: 2002/07/15
投稿数: 39
投稿日時: 2004-02-05 05:53
引用:--------------------------------------------------------------------------------
すみません、ちょっとお聞きしたいんですが、
>最終的にフィールドの定義から変更して(decimal) にて行いました。
というのはどういった意味でしょうか。
フィールドをdoubleからdecimalに変えたということですか?
--------------------------------------------------------------------------------
そうですテーブルのフィールド定義をdecimalに変えました。

スキルアップ/キャリアアップ(JOB@IT)