Pergunta

Por que recebo esse erro?

Object cannot be cast from DBNull to other types.

Quando inseri o valor nulo para um tipo de dados numérico no SQL Server 2005

Aqui está o meu código,

 if (MeasurementTr.Visible == true)
    {
        materialIn.measurementId = Convert.ToInt64(DlMeasurement.SelectedValue.ToString());
    }
    else
    {
        materialIn.measurementId = Convert.ToInt64(DBNull.Value);
    }

EDITAR :

Isto está certo??

 materialIn.measurementId = (Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) != 0) ? Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) : 0;
Foi útil?

Solução

Você não pode converter DBNull.Value para Int64 Como seu código tenta fazer em Convert.ToInt64. DBNull.Value significa "desconhecido" ou "inexistente" e, portanto, não há conversão lógica para nenhum outro tipo de dados.

Se o materialIn a instância é alguma forma de fortemente tibra DataRow, terá um SetMeasurementIdNull Método, que é o que você precisa usar. Se você está usando LINQ para SQL ou EF, não precisará lidar com DBNull em todo, você apenas escreveria materialIn.measurementId = null.

Outras dicas

Porque aquilo Object cannot be cast from DBNull to other types.

Então, o que você precisa fazer é verificar o valor para DBNull.

materialIn.measurementId = dlmeasurement.SelectedValue == dbnull.value? 0: convert.toint64 (dlmeasurement.SelectedValue.toString ());

O DBNULL não se converte para um INT64. Você precisará usar um INT anulável e armazenar nulo no valor ou fazer algo com o valor para representar nulo como 0 que pode ser armazenado em sua propriedade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top