Pregunta

Tenemos nuestro propio ORM que utilizamos aquí y proporcionamos contenedores fuertemente tipados para todas nuestras tablas de base de datos.También permitimos que se ejecute SQL ad-hoc débilmente tipado, pero estas consultas aún pasan por la misma clase para obtener valores de un lector de datos.

Al modificar esa clase para que funcione con Oracle, nos encontramos con una pregunta interesante.¿Es mejor utilizar DBNull.Value o nulo?¿Existe algún beneficio al usar DBNull.Value?Parece más "correcto" usar null, ya que nos hemos separado del mundo de las bases de datos, pero hay implicaciones (no se puede simplemente ciegamente ToString() cuando un valor es nulo, por ejemplo), por lo que definitivamente es algo sobre lo que debemos tomar una decisión consciente.

¿Fue útil?

Solución

Me parece mejor usar nulo, en lugar de DB nulo.

La razón es que, como dijiste, te estás separando del mundo DB.

En general, es una buena práctica verificar los tipos de referencia para asegurarse de que no sean nulos de todos modos.Vas a comprobar si hay valores nulos para otras cosas además de los datos de la base de datos, y creo que es mejor mantener la coherencia en todo el sistema y usar valores nulos, no DBNull.

A la larga, desde el punto de vista arquitectónico, creo que es la mejor solución.

Otros consejos

Si ha escrito su propio ORM, entonces yo diría que use null, ya que puede usarlo como quiera.Creo que DBNull se usó originalmente solo para evitar el hecho de que los tipos de valores (int, DateTime, etc.) no podían ser nulo, por lo que en lugar de devolver algún valor como cero o DateTime.Min, lo que implicar un nulo (malo, malo), crearon DBNull para indicar esto.Quizás había algo más, pero siempre supuse que esa era la razón.Sin embargo, ahora que tenemos tipos que aceptan valores NULL en C# 3.0, DBNull ya no es necesario.De hecho, LINQ to SQL simplemente usa nulos en todas partes.No hay problema.Abraza el futuro...utilizar nulo.;-)

Según la experiencia que he tenido, .NET DataTables y TableAdapters funcionan mejor con DBNull.También abre algunos métodos especiales cuando se escribe fuertemente, como DataRow.IsFirstNameNull cuando está en su lugar.

Desearía poder darle una mejor respuesta técnica que esa, pero para mí lo fundamental es usar DBNull cuando trabajo con objetos relacionados con la base de datos y luego usar un valor nulo "estándar" cuando trato con objetos y código relacionado con .NET.

Usar DBNull.
Nos encontramos con algún tipo de problemas al usar null.
Si no recuerdo mal, no puedes INSERTAR un valor nulo en un campo, solo DBNull.
Podría estar relacionado únicamente con Oracle, lo siento, ya no conozco los detalles.

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