webentwicklung-frage-antwort-db.com.de

Legen Sie eine leere DateTime-Variable fest

Ich würde eine leere String-Variable wie folgt deklarieren:

    string myString = string.Empty;

Gibt es ein Äquivalent für eine 'DateTime'-Variable?

Update:

Das Problem ist, dass ich diese 'DateTime' als Parameter für eine 'StoredProcedure' in SQL benutze.

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

Wenn ich diesen Code ausführte, wurde eine Ausnahme festgestellt, die besagte, dass 'StoredProcedure' einen '@SurgeryDate'-Parameter erwartete.

40
phadaphunk

Da DateTime ein Werttyp ist, können Sie ihm nicht null zuweisen, aber genau für diese Fälle (Abwesenheit eines Werts) Nullable<T> wurde eingeführt - verwenden Sie stattdessen eine nullbare DateTime:

DateTime? myTime = null;
72
BrokenGlass

Sie haben 2 Möglichkeiten:

DateTime date = DateTime.MinValue;

Dies funktioniert, wenn Sie jede X-Zeit etwas tun müssen (da Sie MinValue immer über sein werden), aber tatsächlich subtile Fehler verursachen kann (z. B. die Verwendung einiger Operatoren, die zuerst prüfen, ob Sie MinValue sind), wenn Sie nicht vorsichtig sind .

Und Sie können Nullable verwenden:

DateTime? date = null;

Welches ist Nizza und vermeidet die meisten Probleme, während nur 1 oder 2 eingeführt wird.

Es hängt wirklich davon ab, was Sie erreichen wollen.

24
Shahar Prish

Sie können eine DateTime-Variable auf '1/1/0001 00:00:00' setzen, die Variable selbst kann jedoch nicht null sein. Um diese MinTime zu erhalten, verwenden Sie:

DateTime variableName = DateTime.MinValue;
11
Brian Warfield

Möglicherweise möchten Sie eine nullfähige Datumszeit verwenden. Datetime? someDate = null;

In solchen Fällen finden Sie möglicherweise Fälle von Personen, die DateTime.Max oder DateTime.Min verwenden, aber ich bezweifle, dass Sie dies tun möchten. Dies führt zu Fehlern in Edge-Fällen, schwer lesbarer Code usw.

6
Servy

Die von Ihnen verwendete Methode (AddWithValue) konvertiert null-Werte nicht in Datenbank-Nullwerte. Sie sollten stattdessen DBNull.Value verwenden:

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

Dadurch wird der Wert someDate übergeben, wenn es sich nicht um null handelt, ansonsten um DBNull.Value. In diesem Fall wird der korrekte Wert an die Datenbank übergeben.

5
Alex

Wenn Sie das Datum auf einstellen 

DateTime dNewDate = new DateTime();

Der Wert ist auf {1/1/0001 12:00:00} gesetzt.

4
Chris Catignani

Entweder:

DateTime dt = new DateTime();

oder

DateTime dt = default(DateTime);
4
iliketocode

Option 1: Verwenden Sie eine nullfähige DateTime?

Option 2: Verwenden Sie DateTime.MinValue

Persönlich würde ich Option 1 vorziehen.

3
Matt Burland

Ein string ist eine Folge von Zeichen. Daher ist es sinnvoll, ein leeres string zu haben, bei dem es sich lediglich um eine leere Zeichenfolge handelt.

Aber DateTime ist nur ein einzelner Wert. Daher ist es nicht sinnvoll, von einem „leeren“ DateTime zu sprechen.

Wenn Sie das Konzept „Kein Wert“ darstellen möchten, wird dies in .Net als null dargestellt. Und wenn Sie dies mit Werttypen verwenden möchten, müssen Sie sie explizit als nullfähig machen. Das bedeutet entweder Nullable<DateTime> oder den entsprechenden DateTime?.

DateTime hat (wie alle Werttypen) auch einen Standardwert , der nicht initialisierten Feldern zugewiesen ist und Sie können ihn auch über new DateTime() oder default(DateTime) erhalten. Sie möchten es jedoch wahrscheinlich nicht verwenden, da es ein gültiges Datum darstellt: 1.1.0001 0:00:00.

3
svick

Es gibt kein leeres Datum an sich, meinen Sie so etwas wie:

DateTime? myDateTime = null;
1
Jamie Keeling

Der .addwithvalue benötigt dbnull . Sie könnten so etwas tun:

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

oder verwenden Sie eine Methodenerweiterung ...

  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);
        }
    }
0
Chris Catignani