5 votes

Jeter une valeur NULL

Je suis en train d'essayer de peupler un objet de classe avec des valeurs d'une table de base de données. Le champ someObject.Property est de type int nullable.

someObject.Property = Convert.ToInt32(dbReader["SomeField"]);

Donc, si SomeField est null, Convert va donner une erreur DBNull. Y a-t-il une méthode spécifique que je devrais utiliser pour cela?

6voto

Yuck Points 23174

Cela devrait fonctionner...

someObject.Property = dbReader["SomeField"].Equals(DBNull.Value)
    ? null
    : (Int32)dbReader["SomeField"];

@John - Bonne observation. Modifier pour refléter cet oubli.

3voto

w69rdy Points 5658

Cette méthode peut être utile pour ce que vous essayez de faire. Elle va essayer de convertir la valeur de la colonne en son type respectif, et si elle ne peut pas le faire, elle renverra la valeur par défaut du type.

public T ParseValue(System.Data.SqlClient.SqlDataReader reader, string column)
{
     T result = default(T);
     int index = reader.GetOrdinal(column);
     if (!reader.IsDBNull(index))
         result = (T)reader.GetValue(index);

     return result;
}

2voto

Dustin Laine Points 22815

J'utilise ceci, en remplaçant 0 par n'importe quelle valeur par défaut. Si la propriété est nullable alors vous devriez définir la valeur par défaut à C# null.

someObject.Property = (DBNull.Value.Equals(dbReader["SomeField"])) ? 0 : Convert.ToInt32(dbReader["SomeField"]);

1voto

manojlds Points 96599

Il y a TryParse

http://msdn.microsoft.com/fr-fr/library/f02979c7.aspx

Vous pouvez également envisager d'utiliser l'opérateur de coalescence nulle ?? pour fournir une valeur par défaut si nécessaire.

1voto

Joe Philllips Points 13616

Vous pourriez utiliser TryParse. Cela ne vérifiera pas spécifiquement les NULLs mais cela vous dira s'il est analysable ou non, ce qui est probablement ce que vous voulez vraiment.

bool result = Int32.TryParse(value, out number);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X