tratar pesquisa que retorna valor nulo

31/08/2010

0

no campo id do meu formulário, o usuário pode fazer uma consulta pelo código... qndo o campo tá vazio e o botão de pesquisa é clicado, um if (txt_codigo.text = "") informa o usuário que o campo está vazio. Porém quando o usuário coloca um código que ainda não está registrado no sistema ele reconhece que o txt_codigo possui um valor, mas não consigo tratar a consulta que retorna valor nulo e uma mensagem de erro aparece ...

na camada de apresentação:

 if (txt_id.Text == "")
            {
                mensagem = "Nenhum registro foi selecionado, tente novamente!";
                MessageBox.Show(mensagem, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
           
            else
            {
                int id = Convert.ToInt32(txt_id.Text);
                funcionario dto = new funcionario();

                try
                {
                    funcionarioBLL bll = new funcionarioBLL();
                    dto = bll.listarId(id);
                    txt_nome.Text = dto.Nome;
                    cbo_funcao.SelectedValue = Convert.ToString(dto.Funcao);
                    dtp_admissao.Value = dto.Admissao;
                    dtp_demissao.Value = dto.Demissao;
                 }
                 catch (Exception ex)
                 {
                        throw ex;
                  }
            }

erro que aparece no formulário

Erro: O valor '01/01/0001 00:00:00' não é valido para 'Value'. 'Value' deve estar entre 'MinDate' e 'MaxDate', Nome do parâmetro: Value

os campos dtp_admissao e dtp_demissao são do tipo DateTimePicker


Quando o código do funcinário é válido, ele carrega o SqlDataReader numa boa......




Allan Roberto

Allan Roberto

Responder

Posts

31/08/2010

Marcio Silveira

Allan,
Você tem que ver como é que está implementado aí o seu método listarId, mas a grosso modo é só você testar se o o "dto", possui valor nulo no campo identificador.
seria algo mais ou menos assim:

                try
                {
                    funcionarioBLL bll = new funcionarioBLL();
                    dto = bll.listarId(id);
                    if (dto.Id != null)
                    {
                        txt_nome.Text = dto.Nome;
                        cbo_funcao.SelectedValue = Convert.ToString(dto.Funcao);
                        dtp_admissao.Value = dto.Admissao;
                        dtp_demissao.Value = dto.Demissao;
                    }
                 }
                 catch (Exception ex)
                 {
                        throw ex;
                  }

Mas para ter certeza, seria melhor você colocar aqui no forum o Método listarId da classe funcionarioBLL.
Bom o caminho é esse, verifique se o campo identificador ou o objeto está nulo, lembrando que o não existe campo DateTime nulo, quando o valor não é informado o Framework assume a data "01/01/0001 00:00:00".

Responder

31/08/2010

Allan Roberto

DALpublic funcionario selecionaId(int id)        {            SqlConnection conn = new SqlConnection();            try            {                conn = AbrirDB();                sql = "SELECT * FROM funcionario WHERE id = @id";                SqlCommand cmd = new SqlCommand(sql, conn);                cmd.Parameters.AddWithValue("@id", id);                SqlDataReader dr;
                funcionario dto = new funcionario();                dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);                {                    while (dr.Read())                    {                        dto.Id = Convert.ToInt32(dr["id"]);                        dto.Nome = dr["nome"].ToString();                        dto.Funcao = Convert.ToInt32(dr["id_funcao"]);                        dto.Admissao = Convert.ToDateTime(dr["data_admissao"]);                        dto.Demissao = Convert.ToDateTime(dr["data_demissao"]);                        dto.Status = Convert.ToInt32(dr["id_status_funcionario"]);                        dto.Salario = Convert.ToDecimal(dr["salario"]);                        dto.TipoSalario = Convert.ToInt32(dr["id_tipo_salario"]);                        dto.CPF = dr["cpf"].ToString();                        dto.RG = dr["rg"].ToString();                        dto.OrgaoExp = dr["orgao_exped"].ToString();                        dto.Telefone = dr["tel_resid"].ToString();                        dto.Celular = dr["tel_celular"].ToString();                        dto.Endereco = dr["endereco"].ToString();                        dto.Complemento = dr["complemento"].ToString();                        dto.Bairro = dr["bairro"].ToString();                        dto.CEP = dr["cep"].ToString();                        dto.Cidade = dr["cidade"].ToString();                        dto.UF = Convert.ToInt32(dr["id_uf"]);                        dto.Email = dr["email"].ToString();                        dto.Obs = dr["observacao"].ToString();                    }
                    return dto;                }            }            catch (Exception ex)            {                throw ex;            }            finally            {                FecharDB(conn);            }        }BLLpublic funcionario listarId(int Id)        {            try            {                dal = new funcionarioDAL();                return dal.selecionaId(Id);            }            catch (Exception ex)            {                throw ex;            }        }

 
Responder

01/09/2010

Allan Roberto

tava debugando o código, e ele entende que o campo txt_id.text, ou dto.Id,  quando não é vazio ou nulo, é um valor válido, e caso e ele não localiza o valor no banco de dados, ele vai retornando todos os campos como vazio, daí ele vai tentando preencher os campos, quando chega num campo datetimepicker ele diz que o valor não pode ser nulo e teria que ser o valor mínimo... gostaria de tratar isso mas não sei como proceder
Responder

02/09/2010

Vinicius Vieira

Cara onde você usa "converter.ToDateTime" experimenta chamar um desses métodos:  public static DateTime ParseDateTime(String Str)        {            if (Str == null)            {                return DateTime.MinValue;            }            else if (Str == "")            {                return DateTime.MinValue;            }            else            {                try                {                    DateTime.Parse(Str);                    return DateTime.Parse(Str);                }                catch { return DateTime.MinValue; }            }        }        public static DateTime ParseDateTime(Object Obj)        {            if (Obj == null)            {                return DateTime.MinValue;            }            else if (Obj == "")            {                return DateTime.MinValue;            }            else            {                try                {                    DateTime.Parse(Obj.ToString());                    return DateTime.Parse(Obj.ToString());                }                catch { return DateTime.MinValue; }            }        }
Responder

02/09/2010

Allan Roberto

  cara valeu demais deu certo a parada...
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar