2012-04-02 9 views
31

vorrei dichiarare una variabile stringa vuota vuoto come questo:Impostare un DateTime variabile

string myString = string.Empty; 

c'è un equivalente per la variabile un 'DateTime'?

Aggiornamento:

Il problema è che io uso questo 'DateTime' come parametro per un 'StoredProcedure' in SQL. es:

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

Quando ho eseguito questo codice un'eccezione viene catturato me dicendo la 'StoredProcedure' previsto un parametro '@SurgeryDate'. Ma l'ho fornito. Qualche idea sul perché?

risposta

63

Dal DateTime è un tipo di valore non è possibile assegnare null ad esso, ma esattamente per questi casi (assenza di un valore) Nullable<T> è stato introdotto - utilizzare un annullabile DateTime invece:

DateTime? myTime = null; 
+0

Questo DateTime "Nullable" si inserisce in una colonna del database SQL di tipo D ateTime? Sono nuovo di questo. – phadaphunk

+1

Sì - se la colonna consente l'inserimento di valori nulli – BrokenGlass

+0

@PhaDaPhunk La maggior parte dei database avrà un'impostazione per stabilire se il valore può essere impostato su null. – Servy

5

si consiglia di utilizzare un datetime nullable. Datetime? someDate = null;

In questi casi è possibile trovare istanze di persone che utilizzano DateTime.Max o DateTime.Min, ma dubito fortemente che si desideri farlo. Essa conduce a bug con casi limite, codice che è più difficile da leggere, ecc

1

Non esiste una cosa come una data di vuoto di per sé, vuoi dire qualcosa come:

DateTime? myDateTime = null; 
20

No. Hai 2 opzioni :

DateTime date = DateTime.MinValue; 

Questo funziona quando hai bisogno di fare qualcosa ogni quantità X di tempo (dal momento che sarà sempre più di MinValue), ma può effettivamente causare errori sottili (come l'utilizzo di alcuni operatori w/o prima controllare se si è non MinValue) se non si è caref ul.

Ed è possibile utilizzare Nullable:

DateTime? date = null; 

che è bello ed evita maggior parte dei problemi, introducendo solo 1 o 2.

Dipende da cosa si sta cercando di ottenere.

9

È possibile impostare una variabile DateTime su '1/1/0001 00:00:00' ma la variabile stessa non può essere nullo. Per ottenere questo uso MINTIME:

DateTime variableName = DateTime.MinValue; 
1

Opzione 1: utilizzare un DateTime nullable?

Opzione 2: Uso DateTime.MinValue

Personalmente, preferisco l'opzione 1.

3

Un string è una sequenzadi caratteri. Quindi ha senso avere uno spazio vuoto string, che è solo una sequenza vuota di caratteri.

Ma DateTime è solo un valore, quindi non ha senso parlare di uno "vuoto" DateTime.

Se si desidera rappresentare il concetto di "nessun valore", viene rappresentato come null in .Net. E se vuoi usarlo con i tipi di valore, devi renderli esplicitamente nullable. Ciò significa utilizzare Nullable<DateTime> o l'equivalente DateTime?.

DateTime (proprio come tutti i tipi di valore) ha anche un valore di default , che è assegnato ai campi non inizializzati e si può anche ottenere da new DateTime() o default(DateTime). Ma probabilmente non vuoi usarlo, dato che rappresenta una data valida: 1.1.0001 0:00:00.

5

Il metodo utilizzato (AddWithValue) non converte i valori null nei valori null del database. Si dovrebbe usare DBNull.Value invece:

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

questo passerà il valore someDate se non è null o DBNull.Value altrimenti. In questo caso il valore corretto verrà passato al database.

+0

ok Mi piace questo approccio ma potresti spiegare l'ultima riga ..? – phadaphunk

+0

@PhaDaPhunk: questo è per uno scenario più generale - hai una variabile 'someDate' di tipo' Nullable '. Se il suo valore è 'null', passo' DBNull.Value' al metodo 'AddWithValue'. Altrimenti passo il valore stesso. – Alex

+0

Grazie non sapevo che potevamo farlo! – phadaphunk

4

O:

DateTime dt = new DateTime(); 

o

DateTime dt = default(DateTime); 
1

Se si imposta la data per

DateTime dNewDate = new DateTime(); 

Il valore è impostato su {1/1/0001 00:00:00 AM}

Problemi correlati