web-dev-qa-db-fra.com

Vérifier si la valeur décimale est nulle

Je voudrais vérifier si le nombre décimal est NULL ou s'il a une certaine valeur, puisque la valeur est attribuée à partir de la base de données dans l'objet de classe

public decimal myDecimal{ get; set; }

et puis j'ai 

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

J'essaie:

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

Mais j'obtiens ceci: 

le résultat de l'expression est toujours 'true' puisqu'il s'agit d'une valeur de type 'décimal' n'est jamais égal à null

Comment puis-je vérifier si ce nombre décimal a une valeur?

13
Laziale

Une décimale aura toujours une valeur par défaut. Si vous avez besoin d'un type nullable décimal, vous pouvez utiliser decimal?. Ensuite, vous pouvez faire myDecimal.HasValue

40
Justin

vous pouvez utiliser ce code 

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

decimal est un value type in .NET. Et les types de valeur ne peuvent pas être null. Mais si vous utilisez nullable type pour votre decimal, alors vous pouvez vérifier si votre decimal est null ou non. Comme myDecimal?

Les types nullables sont des instances de la structure System.Nullable. Un nullable type peut représenter la plage normale de valeurs pour sa valeur sous-jacente type, plus une valeur supplémentaire null.

if (myDecimal.HasValue)

Mais je pense que dans votre base de données, si cette colonne contient des valeurs pouvant être annulées, alors il ne devrait pas être du type decimal

3
Soner Gönül

En supposant que vous lisiez à partir d'une ligne de données, vous voulez:

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

Le type décimal est un type de valeur. Par conséquent, si vous souhaitez vérifier s'il a une valeur autre que la valeur pour laquelle il a été initialisé (zéro), vous pouvez utiliser la condition myDecimal! = Default (décimal).

Sinon, vous devriez éventuellement envisager l'utilisation d'un type nullable (décimal?) Et utiliser une condition telle que myNullableDecimal.HasValue

1
SpaceKat

Si vous extrayez cette valeur directement d'une base de données SQL et que la valeur est nulle, ce sera en réalité l'objet DBNull plutôt que null. Effectuez un contrôle avant votre conversion et utilisez une valeur par défaut dans le cas de DBNull ou remplacez votre contrôle nul par la suite par un contrôle sur rdrSelect[23] pour DBNull.

0
Chris

Vous pouvez également créer un utilitaire pratique pour gérer les valeurs de la base de données dans de tels cas. Ex. Ci-dessous, la fonction qui vous donne Nullable Decimal à partir du type d'objet.

    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