Inquiridor
Erro, ao fazer Cadastro de um Cliente

Pergunta
-
Boa noite galerao meu problema é o seguinte, eu tenho uma tabela Pessoa, uma Pessoa_fisica e uma tabela de Endereço, conforme a imagemna minha pagina de cadastro vo trabalhar com essas 3 tabelas, so q da erro ao querer inserir os dados do cliente, segue o codigo de como to fznd pra cadastrar esse cliente e a imagem do errocodigo:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using LojaVirtual.BLL; using LojaVirtual.DAO; namespace LojaVirtual.WEB { public partial class CadastrarPf : System.Web.UI.Page { CidadeBLL cidadesbll = new CidadeBLL(); EstadoBLL estadosbll = new EstadoBLL(); PessoaBLL clientebll = new PessoaBLL(); EnderecoBLL enderecobll = new EnderecoBLL(); PessoaFisicaBLL pessoafisicabll = new PessoaFisicaBLL(); PESSOA cliente = new PESSOA(); PESSOA_FISICA clientepf = new PESSOA_FISICA(); ENDERECO endereco = new ENDERECO(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ddlUF.DataSource = estadosbll.BuscarTodos(); ddlUF.DataTextField = "UF_ESTADO"; ddlUF.DataValueField = "UF_ESTADO"; ddlUF.DataBind(); ddlUF.Items.Insert(0, new ListItem("Selecione Estado", "0")); } } protected void rdBtnPJ_CheckedChanged(object sender, EventArgs e) { Response.Redirect("CadastrarPj.aspx"); } protected void btnCancelar_Click(object sender, EventArgs e) { Response.Redirect("Default.aspx"); } protected void ddlUF_SelectedIndexChanged(object sender, EventArgs e) { if (ddlUF.SelectedValue != "0") { string Uf = ddlUF.SelectedValue; ddlCidade.DataSource = cidadesbll.ListarCidade(Uf); ddlCidade.DataTextField = "NOME_CIDADE"; ddlCidade.DataValueField = "ID_CIDADE"; ddlCidade.DataBind(); } } protected void btnSalvar_Click(object sender, EventArgs e) { cliente.NOME_PESSOA = txtNome.Text.Trim(); cliente.FONE = txtFone.Text.Trim(); cliente.EMAIL = txtEmail.Text.Trim(); cliente.SENHA = txtSenha.Text.Trim(); cliente.TIPO_PESSOA = "C"; cliente.DT_CADASTRO = DateTime.Now; clientepf.ID_PESSOA = cliente.ID_PESSOA; clientepf.CPF = txtCPF.Text.Trim(); clientepf.RG = txtRG.Text.Trim(); clientepf.DT_NASCIMENTO = DateTime.Parse(txtDtNasc.Text.Trim()); clientepf.CELULAR = txtCelular.Text.Trim(); if (ddlSexo.SelectedValue == "Masculino") { clientepf.SEXO = "M"; } else { clientepf.SEXO = "F"; } endereco.ID_PESSOA = cliente.ID_PESSOA; endereco.LOGRADOURO = txtLogradouro.Text.Trim(); endereco.NUMERO = int.Parse(txtNum.Text); endereco.COMPLEMENTO = txtComplemento.Text.Trim(); endereco.BAIRRO = txtBairro.Text.Trim(); endereco.CEP = int.Parse(txtCep.Text.Trim()); endereco.ID_CIDADE = int.Parse(ddlCidade.SelectedValue); clientebll.CadastrarCliente(cliente); pessoafisicabll.CadastrarPF(clientepf); enderecobll.CadastrarEndereco(endereco); } } }
a imagem do erro:- Movido Seilor Bonancio Junior terça-feira, 4 de outubro de 2011 15:00 (De:ASP.NET)
Todas as Respostas
-
Bom dia amigo, neste caso você precisa passar como parâmetro o ID_Pessoa? Acredito que o melhor seria que estes campos fossem auto incrementáveis(IDENTITY), ai bastaria inserir o cliente, retornar o ID que foi gerado pelo banco e usar para cadastrar a pessoa física/jurídica.
O erro que está mostrando é de chave estrangeira(Foreing Key), isto ocorre se você tentar inserir por exemplo um ID na tabela Pessoa_Fisica que é chave estrangeira do campo ID da tabela de Pessoa mas esse ID ainda não existe na tabela de Pessoa.
Verifique se ao chamar
clientebll.CadastrarCliente(cliente);
Esta sendo inserido corretamente na tabela Pessoa antes de chamar o método:pessoafisicabll.CadastrarPF(clientepf);
Acredito que seja esse o problema. Faça um teste e avise se resolver. Abraços
- Sugerido como Resposta Rodrigo Reis Ferreira terça-feira, 4 de outubro de 2011 11:11
-
Amigo no seu banco vc tem uma foreign key chamada "fk_pessoa_fisica_pessoa" e ela está em conflito ou seja já existe um registro apontando para isso, melhor seria vc rever seu banco, customiza-lo melhor e rever as chaves estrangeiras, o erro mostrado é apenas esse.
Junior -
-