8
votes

Manipulation d'une DateTime Dbnull

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> xxx pré>

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;
    }


0 commentaires

6 Réponses :


10
votes

Utilisez isdbnull () xxx

ou si vous avez un sqldatreader xxx

et Créez votre DateTime Nullable ( DateTime? ) et définissez null dans le cas de dbnull . champ () fera automatiquement cela.


0 commentaires

8
votes

Une option possible est de le stocker comme une date annulable de la date avec la syntaxe DateTime?

Voici un Lien vers le MSDN sur l'utilisation de types nullables < / p>


3 commentaires

Donc, sur mon objet d'équipement définir les champs DateTime comme DateTime?


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



2
votes

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 xxx


0 commentaires

0
votes

Vous devez utiliser datarsw ["colleName"] est dbnull code> pour comparer DateTime null.

E.g.: p>

 if(studentDataRow["JoinDate"] is DBNull) { // Do something here }


0 commentaires

5
votes

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?;


0 commentaires

0
votes

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));
    }
}


0 commentaires