c# - validar - Establecer una variable DateTime vacía
enviar null a datetime c# (11)
Declararía una variable String vacía como esta:
string myString = string.Empty;
¿Hay un equivalente para una variable ''DateTime''?
Actualización:
El problema es que utilizo este ''DateTime'' como un parámetro para ''StoredProcedure'' en SQL. P.ej:
DateTime? someDate = null;
myCommand.Parameters.AddWithValue("@SurgeryDate", someDate);
Cuando ejecuto este código, una excepción queda atrapada diciéndome que ''StoredProcedure'' esperaba un parámetro ''@SurgeryDate''. Pero lo proporcioné. ¿Alguna idea de por qué?
Como DateTime
es un tipo de valor, no puede asignarle un valor null
, pero exactamente para estos casos (ausencia de un valor) se Nullable<T>
. En su lugar, use un DateTime
anular:
DateTime? myTime = null;
El .addwithvalue necesita dbnull. Podrías hacer algo como esto:
DateTime? someDate = null;
//...
if (someDate == null)
myCommand.Parameters.AddWithValue("@SurgeryDate", DBnull.value);
o usa una extensión de método ...
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);
}
}
El método que usó ( AddWithValue
) no convierte null
valores null
en nulos de la base de datos. Deberías usar DBNull.Value
en DBNull.Value
lugar:
myCommand.Parameters.AddWithValue(
"@SurgeryDate",
someDate == null ? DBNull.Value : (object)someDate
);
Esto pasará el valor someDate
si no es null
, o DBNull.Value
contrario. En este caso, el valor correcto se transferirá a la base de datos.
Es posible que desee utilizar un datetime nullable. Datetime? someDate = null;
Puede encontrar ejemplos de personas que usan DateTime.Max
o DateTime.Min
en tales casos, pero dudo mucho que quiera hacer eso. Conduce a errores con casos extremos, código que es más difícil de leer, etc.
No existe una fecha vacía per se, ¿te refieres a algo como:
DateTime? myDateTime = null;
No. Tienes 2 opciones:
DateTime date = DateTime.MinValue;
Esto funciona cuando necesita hacer algo cada X cantidad de tiempo (ya que siempre estará sobre MinValue
) pero en realidad puede causar errores sutiles (como el uso de algunos operadores sin verificar primero si no es MinValue
) si no tiene cuidado .
Y puedes usar Nullable
:
DateTime? date = null;
Lo cual es bueno y evita la mayoría de los problemas al presentar solo 1 o 2.
Realmente depende de lo que estás tratando de lograr.
Opción 1: ¿usa un DateTime que se puede anular?
Opción 2: use DateTime.MinValue
Personalmente, preferiría la opción 1.
Puede configurar una variable DateTime para que sea ''1/1/0001 00:00:00'' pero la variable en sí no puede ser nula. Para obtener este MinTime, use:
DateTime variableName = DateTime.MinValue;
Si configura la fecha para
DateTime dNewDate = new DateTime();
El valor está establecido en {1/1/0001 12:00:00 AM}
Una string
es una secuencia de caracteres. Por lo tanto, tiene sentido tener una string
vacía, que es solo una secuencia vacía de caracteres.
Pero DateTime
es solo un valor único, por lo que no tiene sentido hablar de un DateTime
"vacío".
Si quiere representar el concepto de "sin valor", eso se representa como null
en .Net. Y si desea usar eso con tipos de valor, necesita explícitamente convertirlos en nulos. Eso significa usar Nullable<DateTime>
, o el equivalente DateTime?
.
DateTime
(al igual que todos los tipos de valores) también tiene un valor predeterminado , que se asigna a los campos no inicializados y también se puede obtener por new DateTime()
o por default(DateTime)
. Pero probablemente no quiera usarlo, ya que representa una fecha válida: 1.1.0001 0:00:00.
Ya sea:
DateTime dt = new DateTime();
o
DateTime dt = default(DateTime);