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

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

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

Re[3]: NULLの設定について


(過去ログ 74 を表示中)

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

■43524 / inTopicNo.1)  NULLの設定について
  
□投稿者/ がながな (21回)-(2009/11/12(Thu) 08:54:25)

分類:[.NET 全般] 

いつもお世話になります。
NULLかどうかを判断したいのですが、どのようにすればよろしいでしょうか?
テーブルショップマスタ内に商品IDと言う数値型のフィールドがあります。
商品IDは数値又はNULLが入っています。変数SyouhinIDに商品IDの値をセットしたいのですが、

dim rsASO as adodb.recordset
dim SyouhinID as long


中間省略

'//---商品IDがNULLの時
If rsASO("商品ID") Is System.DBNull.Value Then
SyouhinID = 0
End If
'//---商品IDがNULLでない時
If Not (rsASO("商品ID") Is System.DBNull.Value) Then
SyouhinID = rsASO("商品ID").Value
End If


とした時、商品IDがNULLなのに
'//---商品IDがNULLでない時
If Not (rsASO("商品ID") Is System.DBNull.Value) Then
SyouhinID = rsASO("商品ID").Value
End If
が通ってしまいます。
どのようにすれば解決できるのでしょうか?
よろしく御願いいたします。


引用返信 編集キー/
■43527 / inTopicNo.2)  Re[1]: NULLの設定について
□投稿者/ 魔界の仮面弁士 (1384回)-(2009/11/12(Thu) 09:37:30)
No43524 (がながな さん) に返信
> dim SyouhinID as long
お使いのデータベースが分からないので、何とも言えませんが、
本当に Long 型が必要なのでしょうか?
(9桁程度までの数値であれば、Integer で収まるはずです)


ちなみに Jet Provider は、64bit整数型をサポートしていません。
数値は、Decimal型、Integer(Int32)型、Double型などにマッピングされます。

SQL Server の場合には、int 型が Integer、bigint 型は Long に相当します。


> '//---商品IDがNULLの時
> If rsASO("商品ID") Is System.DBNull.Value Then

これは実際の値ではなく、Field オブジェクトを返しますので、DBNull にはなりえません。
rsASO("商品ID") は、rsASO.Fields("商品ID") の省略表記であって、
rsASO("商品ID").Value とは異なる事に注意してください。


実際の値を調べるのであれば、
 rsASO.Fields("商品ID").Value
もしくは
 rsASO.Collect("商品ID")
を利用してください。これらであれば、実際の値が返されます。

なお、Field オブジェクトを変数にキャッシュしない場合には、
Collect プロパティを使った方が、Value プロパティよりも効率が良いとされています。

引用返信 編集キー/
■43534 / inTopicNo.3)  Re[2]: NULLの設定について
□投稿者/ とも (14回)-(2009/11/12(Thu) 11:03:26)
stringに変換してやったら空にならないでしょうか?
それで判断してやればできなかったかな。
rsASO("商品ID").value.tostring = string.empty

とかじゃ判別できませんか?

あとその処理の場合はIf Else でいいんじゃないかなとも思います。

引用返信 編集キー/
■43546 / inTopicNo.4)  Re[3]: NULLの設定について
□投稿者/ がながな (22回)-(2009/11/12(Thu) 13:18:07)
ありがとうございました!!
無事解決いたしました。
ありがとうございます。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -