Ich muss einen Parameter in einem SqlCommand
füllen, aber für einige Bedingungen möchte ich es mit DBNull.Value
und sonst mit einem Wert füllen.Verwenden eines ternären Operators, um einen SqlCommand Parameter zu füllen
Was ich brauche ist, dass, wenn die Variable truckID == -1
dann DBNull.Value
in den Parameter setzen, sonst setzen Sie den Wert von truckID
drin.
Dies ist, was ich versucht habe:
using (SqlCommand command = new SqlCommand(sql.ToString()))
{
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@TruckID", truckID == -1 ? DBNull.Value : truckID);
aber der Compiler sagt mir:
Fehler CS0173 Art des bedingten Ausdrucks nicht bestimmt werden kann, weil es keine implizite Konvertierung zwischen ‚System.DBNull ist 'und 'int'
Wenn ich schreiben würde dies:
command.Parameters.AddWithValue("@TruckID", truckID == -1 ? 0 : truckID);
dann ist der Compiler glücklich. So scheint es, dass für einen ternären Operator beide möglichen Werte vom gleichen Typ sein müssen.
Was wäre der beste Weg, dies zu tun?
EDIT:
der Arbeits Code für mich ist dies:
command.Parameters.Add
(new SqlParameter("@TruckID", SqlDbType.Int).Value = (import.TruckID == -1) ? (object)DBNull.Value : import.TruckID);
EDIT:
Eigentlich oberhalb der Code nicht, nachdem alle nicht funktioniert.
Zur Laufzeit bekam ich dies:
SqlParameterCollection akzeptiert nur Nicht-Null-SqlParameter Typ Objekte, nicht DBNull Objekte
Also habe ich den Code dieses modifizierte und das ist für mich endlich geklappt.
command.Parameters.Add
(new SqlParameter("@PlaceID", SqlDbType.Int) { Value = (import.TruckID == -1) ? (object)DBNull.Value : import.TruckID });
Ist eine regelmäßige ol ''if' Anweisung so eine schlechte Idee hier? – maccettura
Sie müssen vom selben Typ sein oder implizit konvertiert werden (IIRC). Teilen Sie es einfach in tatsächliche if-Anweisungen auf. –
'LKWId == -1? (Objekt) DBNull.value: truckID'. Und verwenden Sie nicht '' AddWithValue' '(https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-ready/). –