kann nicht einfügen DBNULL Wert in SQL Server
-
22-09-2019 - |
Frage
Warum ich diesen Fehler?
Object cannot be cast from DBNull to other types.
, wenn ich Null-Wert für einen numerischen Datentyp in SQL Server eingefügt 2005
Hier ist mein Code,
if (MeasurementTr.Visible == true)
{
materialIn.measurementId = Convert.ToInt64(DlMeasurement.SelectedValue.ToString());
}
else
{
materialIn.measurementId = Convert.ToInt64(DBNull.Value);
}
Bearbeiten :
Ist das richtig ??
materialIn.measurementId = (Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) != 0) ? Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) : 0;
Lösung
Sie können nicht DBNull.Value
zu Int64
als Ihr Code versucht konvertieren in Convert.ToInt64
zu tun. DBNull.Value
bedeutet „unbekannt“ oder „nicht existent“, und daher gibt es keine logische Umwandlung in jeden anderen Datentyp.
Wenn die materialIn
Instanz irgendeine Form von stark typisierte DataRow
ist, wird es ein SetMeasurementIdNull
Verfahren hat, das ist, was Sie verwenden müssen. Wenn Sie Linq to SQL oder EF verwenden, sollten Sie nicht mit DBNull
überhaupt befassen müssen, würden Sie stattdessen nur Schreib materialIn.measurementId = null
.
Andere Tipps
Weil die Object cannot be cast from DBNull to other types.
Also, was Sie tun müssen, ist, den Wert für DBNull
zu überprüfen.
materialIn.measurementId = DlMeasurement.SelectedValue == DBNull.Value? 0: Convert.ToInt64 (DlMeasurement.SelectedValue.ToString ());
DBNull konvertiert nicht zu einem Int64. Sie müssen ein Nullable-int verwenden und dann null speichern im Wert oder etwas mit dem Wert null stellen, wie 0, die in Ihrer Eigenschaft gespeichert werden kann.