Je déclarerais une variable de chaîne vide comme ceci:
string myString = string.Empty;
Existe-t-il un équivalent pour une variable 'DateTime'?
Mettre à jour :
Le problème est que j'utilise ce "DateTime" comme paramètre pour un "StoredProcedure" dans SQL . E.g:
DateTime? someDate = null;
myCommand.Parameters.AddWithValue("@SurgeryDate", someDate);
Lorsque j'exécute ce code, une exception est interceptée en me disant que la 'procédure stockée' attendait un paramètre '@SurgeryDate' . Mais je l'ai fourni . Vous avez une idée du pourquoi?
Comme DateTime
est un type de valeur, vous ne pouvez pas lui affecter null
, mais exactement pour ces cas (absence de valeur) Nullable<T>
a été introduit - utilisez plutôt une nullable DateTime
:
DateTime? myTime = null;
Non, vous avez 2 options:
DateTime date = DateTime.MinValue;
Cela fonctionne lorsque vous devez faire quelque chose chaque X fois (puisque vous serez toujours au-dessus de MinValue
) mais peut en réalité causer des erreurs subtiles (telles que l'utilisation de certains opérateurs sans vérifier d'abord si vous n'êtes pas MinValue
) si vous ne faites pas attention .
Et vous pouvez utiliser Nullable
:
DateTime? date = null;
Qui est Nice et évite la plupart des problèmes en introduisant seulement 1 ou 2.
Cela dépend vraiment de ce que vous essayez d’atteindre.
Vous pouvez définir une variable DateTime sur '1/1/0001 00:00:00' mais la variable elle-même ne peut pas être nulle. Pour obtenir cette utilisation de MinTime:
DateTime variableName = DateTime.MinValue;
Vous voudrez peut-être utiliser une date et heure nullable. Datetime? someDate = null;
Vous pouvez trouver des exemples de personnes utilisant DateTime.Max
ou DateTime.Min
dans de tels cas, mais je doute fort que vous souhaitiez le faire. Cela conduit à des bugs avec les cas Edge, un code plus difficile à lire, etc.
La méthode que vous avez utilisée (AddWithValue
) ne convertit pas les valeurs null
en valeurs null de la base de données. Vous devriez utiliser DBNull.Value
à la place:
myCommand.Parameters.AddWithValue(
"@SurgeryDate",
someDate == null ? DBNull.Value : (object)someDate
);
Cela passera la valeur someDate
s'il ne s'agit pas de null
ou de DBNull.Value
sinon. Dans ce cas, la valeur correcte sera transmise à la base de données.
Si vous définissez la date à
DateTime dNewDate = new DateTime();
La valeur est définie sur {1/1/0001 12:00:00 AM}
Non plus:
DateTime dt = new DateTime();
ou
DateTime dt = default(DateTime);
Option 1: Utiliser un DateTime nullable?
Option 2: Utiliser DateTime.MinValue
Personnellement, je préférerais l'option 1.
Une string
est une séquence de caractères. Il est donc logique d’avoir une string
vide, qui est juste une séquence vide de caractères.
Mais DateTime
est juste une valeur unique, il n’a donc aucun sens de parler de «vide» DateTime
.
Si vous voulez représenter le concept de «pas de valeur», cela est représenté par null
en .Net. Et si vous voulez utiliser cela avec des types de valeur, vous devez explicitement les rendre nuls. Cela signifie soit en utilisant Nullable<DateTime>
, soit l'équivalent DateTime?
.
DateTime
(comme tous les types de valeur) a également une valeur par défaut , qui est assignée aux champs non initialisés et vous pouvez également l'obtenir par new DateTime()
ou default(DateTime)
. Mais vous ne voulez probablement pas l'utiliser, car il représente une date valide: 1.1.0001 0:00:00.
Il n'y a pas de date vide en tant que telle. Voulez-vous dire quelque chose comme:
DateTime? myDateTime = null;
Le .addwithvalue besoin de dbnull . Vous pourriez faire quelque chose comme ceci:
DateTime? someDate = null;
//...
if (someDate == null)
myCommand.Parameters.AddWithValue("@SurgeryDate", DBnull.value);
ou utilisez une extension de méthode ...
public static class Extensions
{
public static SqlParameter AddWithNullValue(this SqlParameterCollection collection, string parameterName, object value)
{
if (value == null)
return collection.AddWithValue(parameterName, DBNull.Value);
else
return collection.AddWithValue(parameterName, value);
}
}