J'ai vu beaucoup, de nombreuses versions de cela, mais aucun d'entre eux ne semble fonctionner de mes besoins.
Mes données provient d'une base de données de fournisseur qui permet à NULL pour les champs DateTime. D'abord, je tire mes données dans un jeu de données. P> Je suis convertissant un jeu de données à une liste pour le traitement. P> public DateTime CheckDBNull(object dateTime)
{
if (dateTime == DBNull.Value)
return DateTime.MinValue;
else
return (DateTime)dateTime;
}
6 Réponses :
Utilisez ou si vous avez un et Créez votre isdbnull () code> sqldatreader code> p> DateTime code> Nullable ( DateTime? code>) et définissez null code> dans le cas de dbnull code>. champ
Une option possible est de le stocker comme une date annulable de la date avec la syntaxe Voici un Lien vers le MSDN sur l'utilisation de types nullables < / p> DateTime? code> p>
Donc, sur mon objet d'équipement définir les champs DateTime code> comme DateTime? Code>
S'il s'agit d'une analyse de rentabilisation valide pour votre équipement ne pas avoir une date de début ou de fin, oui. Sinon, votre couche de DB devrait lancer une exception.
Yep - c'est un raccourci pour nullable
Voici un exemple de certains code que j'utilise pour lire les DateTimes
Je suis sûr qu'il pourrait être écrit mieux mais fonctionne bien pour moi p>
Vous devez utiliser E.g.: p> datarsw ["colleName"] est dbnull code> pour comparer DateTime null. if(studentDataRow["JoinDate"] is DBNull) { // Do something here }
J'ai trouvé que le moyen le plus simple de gérer cela est de lancer le champ comme type de données à l'aide du mot-clé "comme". Cela fonctionne parfaitement pour les champs de base de données pouvant être nuls, et est agréable et simple.
Voici plus de détail sur ceci: Casting direct VS" comme "Opérateur" comme "" P>
Exemple: P>
IDataRecord record = FromSomeSqlQuerySource;
string nullableString;
DateTime? nullableDateTime;
nullableString = record["StringFromRecord"] as string;
nullableDateTime = record["DateTimeFromRecord"] as DateTime?;
J'ai écrit une méthode d'extension générique que j'utilise dans tous mes projets:
private void Example()
{
DataTable dt = GetDataFromDb() // get data from database...
for (int i = 0; i < dt.Rows.Count; i++)
{
Console.WriteLine((DateTime)dt.GetValueSafely<DateTime>("SomeDateColumn", i));
Console.WriteLine((int)dt.GetValueSafely<int>("SomeIntColumn", i));
Console.WriteLine((string)dt.GetValueSafely<string>("SomeStringColumn", i));
}
}