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;
Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top