Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Qual é a melhor maneira de lidar com DBNull's


Tipos anuláveis ​​são bons, mas apenas para tipos que não são anuláveis ​​para começar.

Para tornar um tipo "anulável", acrescente um ponto de interrogação ao tipo, por exemplo:
int? value = 5;

Eu também recomendaria usar o "as " em vez de conversão. Você só pode usar a palavra-chave "as" em tipos anuláveis, portanto, certifique-se de estar lançando coisas que já são anuláveis ​​(como strings) ou use tipos anuláveis ​​como mencionado acima. O raciocínio para isso é
  1. Se um tipo for anulável, o "as " palavra-chave retorna null se um valor for DBNull .
  2. É um pouco mais rápido do que lançar, embora apenas em alguns casos. Isso por si só nunca é uma razão boa o suficiente para usar as , mas juntamente com o motivo acima, é útil.

Eu recomendo fazer algo assim
DataRow row = ds.Tables[0].Rows[0];
string value = row as string;

No caso acima, se row volta como DBNull , então value se tornará null em vez de lançar uma exceção. Esteja ciente de que, se sua consulta de banco de dados alterar as colunas/tipos retornados, usando as fará com que seu código falhe silenciosamente e torne os valores simples null em vez de lançar a exceção apropriada quando dados incorretos são retornados, portanto, é recomendável que você tenha testes em vigor para validar suas consultas de outras maneiras para garantir a integridade dos dados à medida que sua base de código evolui.