Validando Valores nulos vindos de nosso Banco de Dados C#(CSharp)
Postado em : 11/07/2016
Validando valores nulos vindos de nosso Banco de Dados
Quando definimos que uma determinada coluna em nosso Banco de Dados pode ser nula, seja este SqlServer, MySql ou outro qualquer, estes dados precisam ser tratados ou em nossa Query ou em nossa Classe onde faremos a leitura, caso contrario se nossa Query retornar um valor nulo será disparado um erro em tempo de execução.
Exemplo de tratamento de erro em uma Query SqlServer
-- Trantando um inteiro, se este for nullo retorna zero SELECT ISNULL(minhaColuna , 0) as minhaColuna FROM MinhaTabela -- Tratando uma string, se esta for nulla retora '' select ISNULL(minhaColuna ,'') as minhaColuna FROM MinhaTabela -- Tratando uma datatime, se esta for nula retorna data especificada select ISNULL(minhaColuna , '2016-07-11 10:30') as minhaColuna from MinhaTabela
Para o MySql simplemente mude a função ISNULL
para IFNULL
e o restante fica igual.
E quando não temos o controle sobre os dados recebidos ?
O grande problema é que nem sempre temos o controle do que vem do Banco de Dados, muitas vezes temo uma Analista gerando as Procedures e este acaba mandando valores nulos como resposta, para evitar erros quando fizermos a leitura dos dados vamos criar uma classe para tratar cada tipo de dado recebido.
Crie uma Classe em seu projeto, na pasta Models
e de nome de ValidandoNulos.cs
, copie e cole o código abaixo :
Classe para converter dados vindos de nosso Banco de Dados
/* * Rotinas para validar dados vindos de nosso Banco de Dados com possíveis valores nulos * * Visite nossa página http://www.codigoexpresso.com.br * * by Antonio Azevedo * */ using System; public class ValidandoNulos { /// <summary> /// Tenta converter um objeto como data, /// --- se apresentar erro e DataNull=False retorna menor data possivel em C# /// --- DataNull=true retorna null /// </summary> /// <param name="data">Objeto DateTime</param> /// <param name="DataNull">(true/false) se deseja receber um valor nulo</param> /// <returns>DateTime/null</returns> public static DateTime? ConverteData(object data, Boolean DataNull=false) { DateTime newData; try { newData = Convert.ToDateTime(data); } catch (Exception) { if (DataNull) { return null; } else { return DateTime.MinValue; } } return newData; } /// <summary> /// Tenta converter um objeto como string /// --- Se apresentar erro retorna "" /// </summary> /// <param name="Valor">Objeto string</param> /// <returns>retorna string</returns> public static string ConverteString(object Valor) { string newValor; try { newValor = (string)Valor; } catch (Exception) { return ""; } return newValor; } /// <summary> /// Tenta converter um objeto como Int32 /// --- Se apresentar erro retorna 0 /// </summary> /// <param name="Valor">Objeto int</param> /// <returns>retorna Int32</returns> public static Int32 ConverteInt32(object Valor) { Int32 newValor; try { newValor = ConverteInt32(Valor); } catch (Exception) { return 0; } return newValor; } /// <summary> /// Tenta converter um objeto como Boolean /// --- Se apresentar erro retorna false /// </summary> /// <param name="Valor">Objeto Boolean</param> /// <returns>retorna Boolean</returns> public static Boolean ConverteBoolean(object Valor) { Boolean newValor; try { newValor = ConverteBoolean(Valor); } catch (Exception) { return false; } return newValor; } }
Exemplo de uso
empresa.id = ValidandoNulos.ConverteInt32(reader["id"]); empresa.Nome = ValidandoNulos.ConverteString(reader["nome"]); empresa.Data = ValidandoNulos.ConverteData(reader["dtcadastro"],false); empresa.Ativa = ValidandoNulos.ConverteBoolean(reader["ativo"]);
Assim garantiremos que os dados nulos sejam tratados e não teremos surpresas em tempo de execução.
Links Relacionados
- Curso Instalando e configurando o MySql e WorkBench
- Arquitetura CQRS
- Arrays em C#(CSharp)
- Aula 11 - Acessando Banco de Dados SQL SERVER - Criando Consultas em sua aplicação em Asp.Net MVC 4 com C#(CSharp)
- Aula 12 - MS SQL Server - Comandos SQL e Stored Procedures em sua aplicação em Asp.Net MVC 4 com C#(CSharp)
- Aula 13 - MySql - Comandos SQL e Stored Procedures em sua aplicação em Asp.Net MVC 4 com C#(CSharp)
- Aula 15 - Download das ferramentas necessárias para o nosso curso de Asp.Net MVC 4 com C#(CSharp)
- Aula 16 - Criando o banco de dados e configurando o SQLServer para nosso curso de Asp.Net MVC 4 com C#(CSharp)
- Aula 17 - Criando o banco de dados e configurando o SQLServer EXPRESS para nosso curso de Asp.Net MVC 4 com C#(CSharp)
- Aula 18 - Criando o banco de dados e configurando o MySQL para nosso curso de Asp.Net MVC 4 com C#(CSharp)
- C#(CSharp) Converter inteiro para Hexadecimal e Hexadecimal para Inteiro
- C#(CSharp) Exemplo de Conversão de um List<> de uma classe qualquer para um DataTable.
- C#(CSharp) Função para verificar se um determinado número é Primo
- Calcular Idade C# (CSharp), diferença anos entre duas datas
- Classe com Métodos de extensão C# (CSharp)
- Classe para fazer Conexão MS SqlServer em C#(CSharp)
- Classe para fazer Conexão MySql em C#(CSharp)
- Classe para Ler e Gravar Cookies - Asp.Net MVC 4 com C# (CSharp)
- Classe para tratar valores nulos vindos de nossa Query SQL, C#(CSharp).
- Classes anônimas em C#(CSharp)
- Comando nameof() C#(CSharp)
- Comando NULLIF no SQLServer.
- Compare duas strings ignorando maiúsculas e minúsculas C#(CSharp).
- Consulta SQLServer com paginação
- Criando Tabelas Temporarias em MS-SqlServer
- Criar Classes Dinâmicas usando DynamicObject e ExpandoObject em C# (CSharp)
- Curso Instalando e configurando o MS SQL Server Express 2014 e Management Studio 2014
- Definir o dia em um DateTime.
- DELETE CASCADE no SqlServer
- Desvendando o Poder da Função STRING_AGG no SQL Server para concatenação de dados
- Diferença entre parâmetros REF e OUT em C#(CSharp)
- DROP TABLE IF EXISTS no SQL Server.
- Emitir sons pelo auto-falante do computador em C# (CSharp)
- Estrangulando um monólito C#(CSharp)
- Exemplo de acesso a dados com SQL Server em C#.
- Exemplo de consulta em SqlServer para encontrar uma chave Estrangeira
- Exemplo de Stored Procedure com tratamento de erros e transação. (SqlServer)
- Exemplos de Stored Procedure MySql
- Exemplos de Stored Procedure SQL Server
- Explorando Tipos de Dados Personalizados no SqlServer: Utilidade e Impacto na Performance
- Extensões para DataReader, tratando valores de suas consultas SQL (DataReaderExtensions) C#(CSharp)
- Fazendo a paginação de consultas em MySQL com o comando Limit e Offset
- Formatando datas MySql
- Formatando datas SqlServer
- Formatar CEP em C# (CSharp)
- Função MySql Calcular Idade
- Função para devolver data do próximo dia da semana informado C#(CSharp).
- Função para gerar tabela com listagem contendo intervalo entre duas datas. (SqlServer)
- Gerando números randômicos para sorteio de jogos de azar C#(CSharp)
- Grafana Loki e .NET Framework com C#
- Incrementando e decrementando variáveis em C#(CSharp)
- Injeção de dependência
- Integrando MySql Connector em sua aplicação C#(CSharp) no Visual Studio
- Ler string de conexão (connectionStrings) do arquivo Web.config Asp.Net MVC co C#(CSharp)
- Métodos de extensão C#
- MS SQL Server Express 2014 e Management Studio 2014 - Download e Intalação
- MySql e WorkBench - Download e Instalação
- Não consigo apagar um Banco de dados (can not drop database) - MS-SQL Server.
- Ordenando um array com o comando OrderBy C#(CSharp)
- Parar um loop foreach usando o comando break C#(CSharp).
- Quando utilizar NOLOCK e READPAST no SqlServer.
- Recuperar a URL da página anterior em Asp.Net C# (CSharp)
- Recuperar a URL da página atual em Asp.Net C# (CSharp)
- Recuperar para código C# (CSharp) o valor de um componente de nossa página
- Restaurando um Banco de dados quando este fica travado informando estar restaurando, MS-SQL Server.
- Retorna o IP da conexão do Cliente em Asp.Net MVC com C# (CSharp)
- Retorna os dados do Navegador do Cliente em Asp.Net MVC com C# (CSharp)
- Rodando Script MS-SQL Server diretamente pela linha de comando
- Salvando CSV com cabeçalho no SQL Server Management Studio
- Separar String de caracteres C#(CSharp)
- Serilog e .NET Framework com C#
- Tipos de dados em C# (CSharp)
- Tipos de dados primitivos em C#(CSharp)
- Trabalhando com Cursores em MS-SQL Server.
- Tratando colunas nulas em sua Query MySql
- Tratando colunas nulas em sua Query SqlServer
- Update/Delete com INNER em MS-SQL Server
- Validar Modelos com Data Annotation e Windows Form Application C#(CSharp)
- Verificar se uma string é um digito em C# (CSharp)