2017-07-13 5 views
0

Ich versuche, eine Zeile IF Bedingung zu schreiben, wenn Wert der Eigenschaft zugewiesen wird. ich diese Syntax in VB.NET versucht haben, type_of_documents ist nullable integer:NULL-Wert der Datenzeile zuweisen

1) vehicle.type_of_documents = If(vehicle.Istype_of_documentsNull, SqlTypes.SqlInt32.Null, vehicle.type_of_documents) 
2) vehicle.type_of_documents = If(vehicle.Istype_of_documentsNull, DBNull.Value, vehicle.type_of_documents) 
3) vehicle.type_of_documents = If(vehicle.Istype_of_documentsNull, Nothing, vehicle.type_of_documents) 

Nun, ich bin ein wenig aufdringlich diese in einer Linie zu tun. Irgendwie haben all diese Syntax meiner Datenbank keinen Nullwert zugewiesen. Syntax 1 & 2 haben eine Integer-Ausnahme geworfen. Syntax 3 ist kein Fehler, aber kein Änderungs-/Aktualisierungswert in der Datenbank (wie zuvor).

Kann mir jemand eine bessere Syntax zeigen? Da bin ich wirklich nicht auf VB.NET.

Dank im Voraus

+0

Die Bedingungen im If: erste Parameter wie in a "normal" Wenn. Zweite Parameter wenn sie wahr ist, dritter Parameter, wenn false: 'vehicle.type_of_documents = If (vehicle.type_of_documents ist nichts, SqlTypes.SqlInt32.Null, vehicle.type_of_documents)' – muffi

+0

ja, aber ich habe einen Fehler mit Ihrem Syntax Zustand @muffi – andrefadila

+0

anzeigen uns der Fehler. – muffi

Antwort

0

If Der Operator ist im Grunde generisch, das heißt die Art ist, kehrt von dem Typ der zweiten und dritten Argumente abgeleitet. Das bedeutet, dass diese beiden Argumente vom selben Typ sein müssen oder vom Typ des anderen. Eine einfache Besetzung ist alles, was Sie brauchen:

vehicle.type_of_documents = If(vehicle.Istype_of_documentsNull, 
           CObj(DBNull.Value), 
           vehicle.type_of_documents) 

Nun, da das erste Argument angegeben Typ Object die beiden Argumente teilen ihnen einen Typen zu sein.

0

Rückgabetyp von If Methode wird von Ergebnisparameter abgeleitet wird (wie @jmcilhinney bereits beantwortet).
In 1 und 2 Proben Sie werfen Ausnahme erhalten, weil Integer nicht zu SqlTypes.SqlInt32.Null und DbNull.Value Typen gegossen werden kann.
Dritte Beispiel kompilieren, weil Nothing als Integer eingeführt werden kann, ist es einfach Standardwert von Integer, die 0 entspricht.

Wenn Sie DbNull.Value zurückgeben möchten, wenn type_of_documents keinen Wert hat - Sie müssen Cast-Ergebnisse in ihrem allgemeinen Typ haben, der Object ist.

Statt If Methode können Sie Erweiterungsmethode erstellen, die gemeinsame Typ zurückgeben (Objekt) erforderlich durch SqlParameters

Public Module Extensions 
    <Extension> 
    Public Function GetValueOrDbNull(this As Integer?) As Object 
     If this.HasValue Then Return this 
     Return DBNull.Value 
    End Function 
End Module 

und es verwenden,

Dim sqlValue = vehicle.type_of_documents.GetValueOrDbNull()