Não é possível inserir valor dbnull no servidor SQL
-
22-09-2019 - |
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;
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.