ne peut pas insérer la valeur DBNULL dans le serveur sql
-
22-09-2019 - |
Question
Pourquoi je reçois cette erreur?
Object cannot be cast from DBNull to other types.
i lorsque inséré valeur nulle pour un type de données numérique dans SQL Server 2005
Voici mon code,
if (MeasurementTr.Visible == true)
{
materialIn.measurementId = Convert.ToInt64(DlMeasurement.SelectedValue.ToString());
}
else
{
materialIn.measurementId = Convert.ToInt64(DBNull.Value);
}
EDIT :
est-ce droit ??
materialIn.measurementId = (Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) != 0) ? Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) : 0;
La solution
Vous ne pouvez pas convertir DBNull.Value
à Int64
que votre code tente de le faire en Convert.ToInt64
. DBNull.Value
signifie « inconnu » ou « inexistante » et donc il n'y a pas de conversion logique à tout autre type de données.
Si l'instance de materialIn
est une certaine forme de DataRow
fortement typé, il aura une méthode SetMeasurementIdNull
, qui est ce que vous devez utiliser. Si vous utilisez SQL ou LINQ to EF, vous ne devriez pas avoir à traiter DBNull
du tout, au lieu vous suffit d'écrire materialIn.measurementId = null
.
Autres conseils
Parce que Object cannot be cast from DBNull to other types.
Donc ce que vous devez faire est de vérifier la valeur DBNull
.
materialIn.measurementId = DlMeasurement.SelectedValue == DBNull.Value? 0: Convert.ToInt64 (DlMeasurement.SelectedValue.ToString ());
DBNull ne convertit pas à un Int64. Vous aurez besoin d'utiliser un int nullable puis stocker nulle la valeur ou faire quelque chose avec la valeur pour représenter nulle comme 0 qui peut être stocké dans votre propriété.