Manejo de DBNull y NULL en ASP.NET
Pregunta
¿Cuál es la mejor manera de reescribir estas líneas (erróneas)?
¿Bool? resultado = dr ["resultado"] == dbnull.value? nulo: convert.Toint32 (dr ["resultado"]);
...y...
dr ["resultado"] = resultado ?? Dbnull.value;
Ambos no se compilan.
Estoy usando el conector mysql y no me deja establecer, por ejemplo, dr["result"] = null;
que es lo que probé por primera vez.
¿Existe un tipo de datos de .NET más adecuado para representar un mysql anulable? tinyint(1)
?
Solución
Qué tal si:
dr["Hello"] = (object)result ?? DBNull.Value;
bool? result = dr["result"] == DBNull.Value ? null : (bool?)(Convert.ToInt32(dr["result"]) != 0);
La razón por la que su sugerencia no se compila es que ambas alternativas del operador ternario ?:
Debe tener el mismo tipo. DBNull.Value
Obviamente no es del mismo tipo que un bool?
. Lanzando el bool?
a una object
Sin embargo, los convierte en ambos del mismo tipo. Reglas similares se aplican en la segunda fila.
Otros consejos
Si está utilizando un procedimiento almacenado o consultas SQL, entonces puede usar ISNULL()
función de SQL para manejar nulo ...