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)?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top