sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cuál es la mejor manera de lidiar con DBNull's

Los tipos anulables son buenos, pero solo para los tipos que no son anulables para empezar.

Para hacer que un tipo sea "anulable", agregue un signo de interrogación al tipo, por ejemplo:

int? value = 5;

También recomendaría usar "as " palabra clave en lugar de conversión. Solo puede usar la palabra clave "as" en tipos que aceptan valores NULL, así que asegúrese de que está emitiendo cosas que ya aceptan valores NULL (como cadenas) o usa tipos que aceptan valores NULL como se mencionó anteriormente. El motivo de esto es

  1. Si un tipo es anulable, el "as " palabra clave devuelve null si un valor es DBNull .
  2. Es ligeramente más rápido que lanzar, aunque solo en ciertos casos. Esto por sí solo nunca es una buena razón para usar as , pero junto con el motivo anterior, es útil.

Recomiendo hacer algo como esto

DataRow row = ds.Tables[0].Rows[0];
string value = row as string;

En el caso anterior, si row regresa como DBNull , luego value se convertirá en null en lugar de lanzar una excepción. Tenga en cuenta que si su consulta de base de datos cambia las columnas o los tipos que se devuelven, usando as hará que su código falle silenciosamente y hacer que los valores sean simples null en lugar de generar la excepción adecuada cuando se devuelven datos incorrectos, por lo que se recomienda que realice pruebas para validar sus consultas de otras maneras para garantizar la integridad de los datos a medida que evoluciona su base de código.