web-dev-qa-db-ja.com

小数値がnullかどうかを確認します

値はクラスオブジェクトのデータベースから割り当てられるため、10進数がNULLであるか、何らかの値を持っているかどうかを確認したいと思います。

public decimal myDecimal{ get; set; }

そして、私は持っています

myDecimal = Convert.ToDecimal(rdrSelect[23].ToString());

やっています:

if (rdrSelect[23] != DBNull.Value)
                    {
                        myDecimal = Convert.ToDecimal(rdrSelect[23].ToString());
                    }

しかし、私はこれを取得しています:

タイプ 'decimal'の値がnullと決して等しくないため、式の結果は常に 'true'です。

その10進数に値があるかどうかを確認するにはどうすればよいですか?

14
Laziale

小数には常にデフォルト値があります。 nullable type decimalが必要な場合は、decimal?を使用できます。その後、myDecimal.HasValueを実行できます

41
Justin

このコードを使用できます

if (DecimalVariable.Equals(null))  
{
   //something statements
}
8
reza akhlaghi

decimalvalue type .NETで。また、値の型をnullにすることはできません。ただし、 nullable typedecimalの場合、decimalnullであるかどうかを確認できます。 myDecimal?

Nullable型は、System.Nullable構造体のインスタンスです。 null許容型は、その基になる値型の値の通常の範囲に加えて、追加のnull値を表すことができます。

if (myDecimal.HasValue)

しかし、あなたのデータベースでは、この列にnull許容値が含まれている場合、それはdecimalのタイプではないはずです

4
Soner Gönül

あなたがデータ行から読み込んでいると仮定すると、あなたが望むのは:

if ( !rdrSelect.IsNull(23) ) 
{ 
   //handle parsing
}
1
Osa E

Decimalは値型であるため、初期化された値(ゼロ)以外の値があるかどうかを確認する場合は、myDecimal!= default(decimal)の条件を使用できます。

それ以外の場合は、null許容(10進数?)型の使用とmyNullableDecimal.HasValueなどの条件の使用を検討する必要があります。

1
SpaceKat

DbからDataTableオブジェクトからnullの10進数を取得しようとしたときに、この問題に最近遭遇しましたが、ここではこの答えを見ていません。私はこれが簡単で短いと思います:

var value = rdrSelect.Field<decimal?>("ColumnName") ?? 0;

私の場合、モデルにNULL可能な10進数はありませんでしたが、1に対してすばやくチェックする必要があるため、これは役に立ちました。 db値がnullである場合、デフォルト値を割り当てます。

0
OrionMD

この値をSQLデータベースから直接取得していて、そこの値がnullの場合、実際にはnullではなくDBNullオブジェクトになります。変換の前にチェックを配置し、DBNullのイベントでデフォルト値を使用するか、nullチェックをDBNullrdrSelect[23]のチェックに置き換えます。

0
Chris

また、このような場合にDBからの値を処理する便利なユーティリティ関数を作成することもできます。例以下は、オブジェクトタイプからNullable Decimalを提供する関数です。

    public static decimal? ToNullableDecimal(object val)
    {
        if (val is DBNull ||
            val == null)
        {
            return null;
        }
        if (val is string &&
            ((string)val).Length == 0)
        {
            return null;
        }
        return Convert.ToDecimal(val);
    } 
0
DotNetUser