2009-08-29 9 views

Répondre

12

Il existe 3 approches courantes ici;

  • si vous parlez object (peut-être que vous allez chercher à partir d'un lecteur de données), puis DBNull.Value peut représenter nulle. Je n'ai pas tendance à laisser ceci hors de la couche de données, bien que
  • dû à l'histoire de .NET 1.1, DateTime.MinValue soit communément interprété comme null; un nombre magique, peut-être - mais il fonctionne et est supporté par la plupart des liaisons de données, etc.
  • dans .NET 2.0, Nullable<T> signifie que vous pouvez utiliser DateTime? - c'est-à-dire un nullable-of-DateTime; Il suffit d'utiliser DateTime? où vous voulez dire un DateTime qui peut être nul, et vous pouvez lui donner une valeur de null ou DateTime valide.

D'autres réflexions sur l'accès des données et nulls:

  • lors du passage à un SqlCommand vous doit utilisation DBNull.Value, non null - voir ci-dessous
  • lors de la lecture d'un lecteur de données, J'ai tendance à vérifier reader.IsDbNull(ordinal)

choses de commande (avec Nullable<T> comme exemple):

param.Value = when.HasValue ? (object)when.Value : DBNull.Value; 
+0

Mark, Merci beaucoup. – odiseh

3

Utilisez DateTime?

Quel problème vous rencontrez, en particulier?

- Modifier

Pour que ce soit clair, c'est un objet DateTime Nullable, pas une question :)

DateTime? t = null; 

- Edit

En réponse aux commentaires, vérifiez comme ceci:

DateTime? theTime; 

if(table["TheColumn"] == DBNull.Value){ 
    theTime = null; 
} else { 
    theTime = (DateTime) table["TheColumn"]; 
} 
+0

Je ne peux pas convertir un objet (une colonne de DataRow) en DateTime. – odiseh

+0

Répondu par l'édition Vous avez juste besoin de vérifier si elle est égale à 'DBNull.Value'. –

+0

Oh je l'ai trouvé Merci. – odiseh

Questions connexes