C # ADO.NET: Nullen und DbNull - gibt es effizientere Syntax?

Habe ich eine DateTime?dass ich versuche, einfügen in ein Feld mit einer DbParameter. Ich bin momentan dabei die parameter wie folgt:

DbParameter datePrm = updateStmt.CreateParameter();
datePrm.ParameterName = "@change_date";

Und dann will ich den Wert der DateTime? in die dataPrm.Value während Kontoführung für nulls.

Dachte ich zunächst, ich wäre schlau:

datePrm.Value = nullableDate ?? DBNull.Value;

aber das schlägt fehl mit der Fehlermeldung

Operator '??' angewendet werden kann nicht auf Operanden vom Typ " System.DateTime?' und 'System.DBNull'

Also ich denke, das funktioniert nur, wenn das zweite argument eine null-version des ersten Arguments. So dann ging ich für:

datePrm.Value = nullableDate.HasValue ? nullableDate.Value : DBNull.Value;

aber das funktioniert auch nicht:

Typ des bedingten Ausdrucks kann nicht bestimmt werden, denn es gibt keine implizite Konvertierung zwischen " System.DateTime " und " System.DBNull'

Aber ich will nicht, um die Konvertierung zwischen diesen Typen!

Bisher das einzige, was ich bekommen kann, zu arbeiten:

if (nullableDate.HasValue)
  datePrm.Value = nullableDate.Value;
else
  datePrm.Value = DBNull.Value;

Ist das wirklich die einzige Art, wie ich schreiben kann? Gibt es einen Weg, um einen one-liner mit dem ternären operator zu arbeiten?

Update: ich nicht wirklich, warum????? version nicht funktioniert. MSDN sagt:

????? operator gibt den linken Operanden, wenn es nicht null ist, oder aber es gibt den rechten Operanden.

Das ist genau das, was ich will!!!

Update2: Gut, es war ziemlich offensichtlich am Ende:

datePrm.Value = nullableDate ?? (object)DBNull.Value;

InformationsquelleAutor der Frage Stewart Johnson | 2008-10-20

Schreibe einen Kommentar