tratar pesquisa que retorna valor nulo
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......
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
Curtidas 0
Respostas
Marcio Silveira
31/08/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".
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".
GOSTEI 0
Allan Roberto
31/08/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; } }
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; } }
GOSTEI 0
Allan Roberto
31/08/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
GOSTEI 0
Vinicius Vieira
31/08/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; } } }
GOSTEI 0
Allan Roberto
31/08/2010
cara valeu demais deu certo a parada...
GOSTEI 0