it-swarm.com.de

Überprüfen Sie, ob der Dezimalwert null ist

Ich möchte prüfen, ob die Dezimalzahl NULL ist oder einen Wert hat, da der Wert aus der Datenbank im Klassenobjekt zugewiesen wird:

public decimal myDecimal{ get; set; }

und dann habe ich 

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

Ich versuche:

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

Aber ich verstehe das: 

das Ergebnis des Ausdrucks ist immer "true", da ein Wert vom Typ 'dezimal' ist niemals gleich null

Wie kann ich überprüfen, ob diese Dezimalzahl einen Wert hat?

13
Laziale

Eine Dezimalzahl hat immer einen Standardwert. Wenn Sie einen nullable-Typ decimal benötigen, können Sie decimal? verwenden. Dann können Sie myDecimal.HasValue

40
Justin

sie können diesen Code verwenden 

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

decimal ist in .NET ein value type . Und Werttypen können nicht null sein. Aber wenn Sie nullable type für Ihre decimal, dann können Sie Ihr decimal überprüfen ist null oder nicht. Wie myDecimal?

Nullable-Typen sind Instanzen der System.Nullable-Struktur. Eine nullfähige type kann den normalen Wertebereich für den zugrunde liegenden Wert darstellen Typ plus einen zusätzlichen null Wert.

if (myDecimal.HasValue)

Aber ich denke in Ihrer Datenbank, wenn diese Spalte nullfähige Werte enthält, dann ist sollte nicht der Typ von decimal sein. 

3
Soner Gönül

Vorausgesetzt, Sie lesen aus einer Datenzeile, möchten Sie:

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

Decimal ist ein Werttyp. Wenn Sie also prüfen möchten, ob ein anderer Wert als der mit (Null) initialisierte Wert verwendet wird, können Sie die Bedingung myDecimal! = Default (decimal) verwenden.

Andernfalls sollten Sie möglicherweise die Verwendung eines nullbaren Typs (dezimal?) Und die Verwendung einer Bedingung wie myNullableDecimal.HasValue in Betracht ziehen

1
SpaceKat

Ich bin kürzlich auf dieses Problem gestoßen, als ich versucht habe, eine Null-Dezimalstelle aus einem DataTable -Objekt von db abzurufen, und habe diese Antwort hier nicht gesehen. Ich finde das einfacher und kürzer:

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

Dies war in meinem Fall nützlich, da ich im Modell keine nullbare Dezimalstelle hatte, sondern eine schnelle Überprüfung gegen eine benötigte. Wenn der DB-Wert zufällig null ist, wird nur der Standardwert zugewiesen.

0
OrionMD

Wenn Sie diesen Wert direkt aus einer SQL-Datenbank abrufen und der Wert dort null ist, handelt es sich tatsächlich um das Objekt DBNull und nicht um null. Setzen Sie entweder einen Check vor der Konvertierung und verwenden Sie einen Standardwert für DBNull, oder ersetzen Sie Ihren Null-Check anschließend durch einen Check auf rdrSelect[23] für DBNull.

0
Chris

In solchen Fällen können Sie auch nützliche Hilfsfunktionen erstellen, um Werte aus der Datenbank zu verarbeiten. Ex. Nachfolgend sehen Sie die Funktion, die Ihnen Nullable Decimal vom Objekttyp gibt.

    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