2011-06-20 11 views
1

私は、データベースからデータをフェッチし、ドメインobject.Letsにそれを移入していますので、私は、メインクラス内のドメインオブジェクトを作成していデータベースからの値が.Net 2.0でnullかどうかをどのように識別できますか?

public class A 
    { 
     int? ai; 

     public int? AI 
     { 
      get { value = ai;} 
      Set { ai = value; } 

     } 

    } 

を言います。

class TestClass 
    { 
     static void Main(string[] args) 
     { 
      class A objData = new A(); 
    // here some logic for creating connection to the database and calling the datareader to fetch the //data. 
     int temp =(int) objDataReader["aiDAta"]; 
     objData.ai = temp == null? 0: temp; 
     func(objData); 

    } 
    } 

public void func(A objData) 
{ 

// Here i want to display the value of objData.ai only if its database value is not null.since i was //already assigned 0,if the value from the database is null...how can i able to identify whether the value //from the database is null or not? also,In database "aiDAta" will have the value range from 0 - 99. 
} 

}

は、ここで私は、データベースからの値がnullの場合は、そのデータベースの値が、私はすでに0に割り当てられたnull.sinceされていない場合にのみ、objData.aiの​​値を表示したいです...どのように私はデータベースからの値がnullかどうかを識別することができますか?また、データベースの「aiDAta」の値の範囲は0〜99です。

答えて

1

キャストしてNullableにすると、HasValueプロパティがチェックされます。値の型がnullでない場合のみtrueです。

+0

にobjData.ai比較iは、 "0" を代入しデータベースからは、馬ではnullですin() –

+1

「データベースにnullだった」情報を提供したい場合は、null可能ながそのジョブを実行できるようにし、単にnull参照を格納します。あなたは結局それをそのように宣言しました。 – asawyer

0

通常ヌルDBのフィールドは、以下のキャストが失敗した場合にはSystem.DbNullとして返されます。

int temp =(int) objDataReader["aiDAta"]; 

あなたが代わりにそれを

0

を使用する前にNULL値をチェックするDBDataReader's IsNullメソッドを使用することができます値がNULLであるかどうかを検証するには、oracle関数を作成し、評価する値を渡します。

CREATE OR REPLACE 
    FUNCTION isNull(
     i_value IN VARCHAR2) 
    RETURN NUMBER 
    IS 
    BEGIN 
    IF i_value IS NOT NULL THEN 
     RETURN 1; 
    ELSE 
     RETURN 0; 
    END IF; 
    END; 
/
+0

申し訳ありませんが、良い考えではなく、 "DBNull.value"または "IsDBNull"で.netでnullを処理できます。 –

2

値場合

DBNull.value 

代わりにNULL

又は

チェック

IsDBNull(objData.ai) 

又は

public Int32 TryCastInteger32(object value) 
{ 
    if (value != null && !Information.IsDBNull(value)) { 
     Int32 retVal = default(Int32); 
     if (Int32.TryParse(value.ToString(), out retVal)) { 
      return retVal; 
     } 
    } 
    return 0; 
} 
関連する問題