2012-04-02 11 views
31

chciałbym zadeklarować pusta zmienna String tak:Ustaw pusty DateTime zmienna

string myString = string.Empty; 

Czy istnieje odpowiednik dla zmiennej a „datetime”?

Aktualizacja:

Problem polega Używam tego „DateTime” jako parametr na „przechowywana” w SQL. Np:

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

Kiedy uruchomić ten kod zostanie przechwycony wyjątek mówiący mi, że „przechowywana” oczekuje parametr „@SurgeryDate”. Ale ja to zapewniłem. Każdy pomysł, dlaczego?

Odpowiedz

63

Od DateTime jest typem wartości nie można przypisać null do niego, ale dokładnie w tych przypadkach (brak wartości) Nullable<T> został wprowadzony - użyj zerowalne DateTime zamiast:

DateTime? myTime = null; 
+0

Czy ten "Nullable" DateTime zmieści się w kolumnie bazy danych SQL typu D ateTime? Jestem nowy w tym. – phadaphunk

+1

Tak - jeśli kolumna umożliwia wstawianie wartości pustych – BrokenGlass

+0

@PhaDaPhunk Większość baz danych będzie miała ustawienie określające, czy wartość ta może być ustawiona na wartość null. – Servy

5

Możesz użyć zerowalna data-godzina. Datetime? someDate = null;

W takich przypadkach można znaleźć przypadki osób używających DateTime.Max lub DateTime.Min, ale bardzo wątpię, że chcesz to zrobić. To prowadzi do błędów z przypadków brzegowych, kod, który jest trudniejszy do odczytania, itd

1

Nie ma czegoś takiego jak pustym terminem per se, masz na myśli coś takiego:

DateTime? myDateTime = null; 
20

nr Masz 2 opcje :

DateTime date = DateTime.MinValue; 

To działa, gdy trzeba coś zrobić każdą kwotę X czasu (ponieważ zawsze będzie nad MinValue), ale w rzeczywistości może powodować subtelne błędy (takie jak korzystanie z niektórych operatorów w/o uprzedniego sprawdzenia, czy jesteś nie MinValue) jeśli nie jesteś caref ul.

i można korzystać Nullable:

DateTime? date = null; 

Co jest miłe i pozwala uniknąć większości problemów, wprowadzając jednocześnie tylko 1 lub 2.

To naprawdę zależy od tego, co chce osiągnąć.

9

Można ustawić zmienną DateTime na "1/1/0001 00:00:00", ale sama zmienna nie może mieć wartości null. Aby uzyskać to użycie aplikacji MinTime:

DateTime variableName = DateTime.MinValue; 
1

Opcja 1: Czy można stosować zerowy czas?

Opcja 2: Wykorzystanie DateTime.MinValue

Osobiście wolałbym wariant 1.

3

string jest sekwencja znaków. Dlatego warto mieć pustą string, która jest po prostu pustą sekwencją znaków.

Ale DateTime to tylko jedna wartość, więc nie ma sensu mówić o "pustym" DateTime.

Jeśli chcesz reprezentować pojęcie "brak wartości", jest to reprezentowane jako null w .Net. A jeśli chcesz użyć tego z typami wartości, musisz jawnie je unieważnić. Oznacza to albo użycie Nullable<DateTime>, albo odpowiednika DateTime?.

DateTime (podobnie jak wszystkich typów wartości) ma również wartość domyślny, który jest przypisany do pola niezainicjowanych i można też dostać go new DateTime() lub default(DateTime). Ale prawdopodobnie nie chcesz go używać, ponieważ reprezentuje prawidłową datę: 1.1.0001 0:00:00.

5

Metoda użyta (AddWithValue) nie konwertuje wartości null na wartości zerowe bazy danych. Należy użyć DBNull.Value zamiast:

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

Przepuszcza wartość someDate jeśli nie jest null lub DBNull.Value inaczej. W takim przypadku poprawna wartość zostanie przekazana do bazy danych.

+0

ok Podoba mi się to podejście, ale czy mógłbyś wyjaśnić ostatnią linię ..? – phadaphunk

+0

@PhaDaPhunk: to jest dla bardziej ogólnego scenariusza - twój ma zmienną 'someDate' typu' Nullable '. Jeśli jego wartość to 'null', przekazuję' DBNull.Value' do metody 'AddWithValue'. W przeciwnym razie przekazuję samą wartość. – Alex

+0

Dzięki, nie wiedziałem, że możemy to zrobić! – phadaphunk

4

Albo:

DateTime dt = new DateTime(); 

lub

DateTime dt = default(DateTime); 
1

Jeśli ustawisz datę na

DateTime dNewDate = new DateTime(); 

wartość jest ustawiona na {1/1/0001 12:00:00 AM}

Powiązane problemy