2012-04-02 21 views
31

Me declarar una variable de cadena vacío vacío como esto:Establecer una variable de DateTime

string myString = string.Empty; 

¿Hay un equivalente para la variable a 'DateTime'?

Actualización:

El problema es que utilizo este 'DateTime' como un parámetro para un 'StoredProcedure' en SQL. por ejemplo:

DateTime? someDate = null; 
    myCommand.Parameters.AddWithValue("@SurgeryDate", someDate); 

Cuando ejecuto el código se hace una excepción conmigo atrapado diciendo la 'StoredProcedure' espera un parámetro '@SurgeryDate'. Pero lo proporcioné. ¿Alguna idea de por qué?

Respuesta

63

Desde DateTime es un tipo de valor que no puede asignar null a ella, pero exactamente para estos casos (ausencia de un valor) Nullable<T> se introdujo - utilizar un anulable DateTime lugar:

DateTime? myTime = null; 
+0

¿Esta fecha de 'Nullable' cabe en una columna de Base de datos SQL de tipo D atetime? Soy nuevo en esto. – phadaphunk

+1

Sí - si la columna permite insertar valores nulos – BrokenGlass

+0

@PhaDaPhunk La mayoría de las bases de datos tendrán una configuración para establecer si el valor puede establecerse como nulo. – Servy

5

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. Esto conduce a errores con casos extremos, el código que es más difícil de leer, etc.

1

No hay tal cosa como una fecha de vacío de por sí, es lo que quiere decir algo así como:

DateTime? myDateTime = null; 
20

No. Tienes 2 opciones :

DateTime date = DateTime.MinValue; 

Esto funciona cuando se necesita hacer algo cada X cantidad de tiempo (ya que siempre será más MinValue), pero en realidad puede causar errores sutiles (como el uso de algunos operadores w/o verificar primero si está no MinValue) si no está preocupado ul.

Y puede utilizar Nullable:

DateTime? date = null; 

que es agradable y evita la mayoría de los problemas al tiempo que introduce solamente 1 o 2.

Realmente depende de lo que está tratando de lograr.

9

Puede establecer una variable DateTime para que sea '1/1/0001 00:00:00' pero la variable en sí no puede ser nula. Para obtener este uso MinTime:

DateTime variableName = DateTime.MinValue; 
1

Opción 1: Use un DateTime que se puede nulos?

Opción 2: Uso DateTime.MinValue

Personalmente, prefiero la opción 1.

3

Un string es una secuencia de caracteres . Por lo tanto, tiene sentido tener un string vacío, que es solo una secuencia vacía de caracteres.

Pero DateTime tiene un solo valor, por lo que no tiene sentido hablar de un "vacío" DateTime.

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 valor) también tiene un valor por defecto , que se asigna a los campos sin inicializar y también se puede conseguir por new DateTime() o default(DateTime). Pero probablemente no quiera usarlo, ya que representa una fecha válida: 1.1.0001 0:00:00.

5

El método que utilizó (AddWithValue) no convierte los valores de null en nulos de la base de datos. Debe utilizar DBNull.Value lugar:

myCommand.Parameters.AddWithValue(
    "@SurgeryDate", 
    someDate == null ? DBNull.Value : (object)someDate 
); 

esto pasará el valor someDate si no es null, o de lo contrario DBNull.Value. En este caso, el valor correcto se transferirá a la base de datos.

+0

ok Me gusta este enfoque, pero podría explicar la última línea ...? – phadaphunk

+0

@PhaDaPhunk: esto es para una situación más general: tienes una variable 'someDate' de tipo' Nullable '. Si su valor es 'null', paso' DBNull.Value' al método 'AddWithValue'. De lo contrario, paso el valor en sí mismo. – Alex

+0

¡Gracias, no sabía que podíamos hacer eso! – phadaphunk

4

O bien:

DateTime dt = new DateTime(); 

o

DateTime dt = default(DateTime); 
1

Si se establece la fecha para

DateTime dNewDate = new DateTime(); 

El valor se establece en {1/1/0001 12:00:00 AM}

Cuestiones relacionadas