Array
(
)

tratar pesquisa que retorna valor nulo

Allan Roberto
   - 31 ago 2010

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......

Marcio
   - 31 ago 2010

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".

0
|
0

Allan Roberto
   - 31 ago 2010

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;            }        }

 

0
|
0

Allan Roberto
   - 01 set 2010

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

0
|
0

Vinicius Vieira
   - 02 set 2010

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; }            }        }

0
|
0

Allan Roberto
   - 02 set 2010

  cara valeu demais deu certo a parada...

0
|
0