Bonjour,
J'ai l'impression d'être tombé sur un trou dans la raquette, et j'aimerais votre avis sur la méthode la plus propre pour contourner le problème.
Dans ma base de données, j'ai une table contenant une colonne du type datetime2.
Cette colonne accepte les NULL.
Dans mon programme, je souhaite charger cette donnée dans une variable de type DateTime.
Avec mon SqlDataReader, si je fais dr.GetDatetime(x) alors tout fonctionne bien jusqu'à ce que j'aie une valeur nulle.
A ce moment la méthode GetDatetime plante sauvagement.
Avec le type SQL datetime tout court (sans le 2) je pouvais faire :
dr.GetSqlDatetime(x) et tester si le résultat avait la proproété Value égale = DBNull.Value
Seulement, dr.GetSqlDatetime(x) plante lorsque je tente de charger une colonne du type datetime2
Il n'y a évidement pas de méthode GetSqlDatetime2, ça aurait été trop beau…
Du coup, j'ai fait cette méthode d'extension, mais je trouve ça relativement crade...
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public static DateTime? GetNullableDateTime(this SqlDataReader dr, int column) { if (dr.IsDBNull(column)) { return null; } else { return dr.GetDateTime(column); } }
Notamment, ceci ne fonctionnera pas si mon SqlCommand a pour optimisation "forwardonly".
Habituellement je gère les NULL de cette manière, que je trouve plus élégante :
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public static int? OrNull(this SqlInt32 value) { return value.IsNull ? (int?)null : value.Value; }
Partager