Usuário com melhor resposta
Inserir dados em uma tabela, pegar a ID da mesma e usar com FK em outra.

Pergunta
-
Galera, to ralando aqui e quando pensei ter conseguido, infelizmente ainda não deu certo minha rotina.
Bem, eu tenho 2 tabelas: Tab_Endereco e Tab_Funcionario:
Eu preciso da FK_Id_Endereco para cadastrar meu funcionário. O problema é: Eu consigo pegar uma Id, porém, ela não bate com a ID Registrada!!
Segue o código, por favor, me ajudem... É para um trabalho da facul e ainda estou engatinhando em ADO.NET xS
//Variaveis nome = txtNome.Text; sobrenome = txtSobrenome.Text; cpf = txtCPF.Text; Login = txtCadastrarLogin.Text; Senha = txtCadastrarSenha.Text; logradouro = txtEndereco.Text; numero = txtNumero.Text; complemento = txtComplemento.Text; cidade = txtCidade.Text; uf = dpdListEstado.Text; ADM = dpdTpCadastro.Text; // COMANDO SQL PARA INSERIR O ENDEREÇO // NOTA, O ENDEREÇO DEVE SER CARREGADO ANTES PARA GERAR FK_iD_ENDERECO ;) cmdInserEnd = @"INSERT INTO Tab_Endereco(Logradouro, Numero, Cidade, Estado) VALUES (@Logradouro, @Numero, @Cidade, @Estado)"; // COMANDO SQL PARA INSERIR DADOS NA TABELA FUNCIONÁRIO cmdInserFunc = @"insert into Tab_Funcionario (Nome, Sobrenome, CPF, Id_Endereco, Login,Senha,ADM) VALUES (@Nome, @Sobrenome, @CPF, @Id_Endereco, @Login, @Senha, @ADM)"; strConn = ConfigurationManager.ConnectionStrings["infomais"].ConnectionString; // INSTANCIA A STRCONN, CRIANDO UMA STRING PARA EXECUTAR A CONEXÃO conn = new SqlConnection(strConn); // CRIA O "COMMAND" PARA INSERIR OS DADOS NA TABELA ENDEREÇO cmd = new SqlCommand(cmdInserEnd, conn); // ABRE A CONEXÃO COM O BANCO DE DADOS conn.Open(); // DEFINE OS PARAMETROS cmd.Parameters.AddWithValue("@Logradouro", logradouro); cmd.Parameters.AddWithValue("@Numero", numero); cmd.Parameters.AddWithValue("@Cidade", cidade); cmd.Parameters.AddWithValue("@Estado", uf); //EXECUTA OS PARAMETROS :) cmd.ExecuteNonQuery(); //SELECIONA A ULTIMA ID NA TABELA string NovoId = @"Select IDENT_CURRENT ('Tab_Funcionario') From Tab_Endereco"; // COMANDO DA ID cmd = new SqlCommand(NovoId, conn); // PEGA ID DA TAB_ENDERECO IdRetorno = Convert.ToString(cmd.ExecuteScalar()); // COMANDO PARA INSERIR DADOS NA TAB_FUNCIONARIO cmd2 = new SqlCommand(cmdInserFunc, conn); // PARAMETROS DA TABELA DE FUNCIONARIOS cmd2.Parameters.AddWithValue("@Nome", nome); cmd2.Parameters.AddWithValue("@Sobrenome", sobrenome); cmd2.Parameters.AddWithValue("@CPF", cpf); cmd2.Parameters.AddWithValue("@Login", Login); cmd2.Parameters.AddWithValue("@Senha", Senha); cmd2.Parameters.AddWithValue("@ADM", ADM); cmd2.Parameters.AddWithValue("@Id_Endereco", IdRetorno); // EXECUTA OS COMANDOS DA TABELA DE FUNCIONARIOS. cmd2.ExecuteNonQuery(); ltlMensagem.Text = "Usuário Cadastrado - Seja Bem-vindo!"; }
Assunto = dúvida
- Movido AndreAlvesLimaModerator sexta-feira, 26 de outubro de 2012 10:52 (De:Visual Studio - Geral)
Respostas
-
Claudio,
Tente usar da função SCOPE_IDENTITY do SQL para recuperar o ultimo id da tabela que sofreu uma inserção no contexto atual, por exemplo:
// Variaveis nome = txtNome.Text; sobrenome = txtSobrenome.Text; cpf = txtCPF.Text; Login = txtCadastrarLogin.Text; Senha = txtCadastrarSenha.Text; logradouro = txtEndereco.Text; numero = txtNumero.Text; complemento = txtComplemento.Text; cidade = txtCidade.Text; uf = dpdListEstado.Text; ADM = dpdTpCadastro.Text; // COMANDO SQL PARA INSERIR O ENDEREÇO // NOTA, O ENDEREÇO DEVE SER CARREGADO ANTES PARA GERAR FK_iD_ENDERECO ;) cmdInserEnd = @"INSERT INTO Tab_Endereco(Logradouro, Numero, Cidade, Estado) VALUES (@Logradouro, @Numero, @Cidade, @Estado); GO SELECT SCOPE_IDENTITY()"; // COMANDO SQL PARA INSERIR DADOS NA TABELA FUNCIONÁRIO cmdInserFunc = @"insert into Tab_Funcionario (Nome, Sobrenome, CPF, Id_Endereco, Login,Senha,ADM) VALUES (@Nome, @Sobrenome, @CPF, @Id_Endereco, @Login, @Senha, @ADM)"; strConn = ConfigurationManager.ConnectionStrings["infomais"].ConnectionString; // INSTANCIA A STRCONN, CRIANDO UMA STRING PARA EXECUTAR A CONEXÃO conn = new SqlConnection(strConn); // CRIA O "COMMAND" PARA INSERIR OS DADOS NA TABELA ENDEREÇO cmd = new SqlCommand(cmdInserEnd, conn); // ABRE A CONEXÃO COM O BANCO DE DADOS conn.Open(); // DEFINE OS PARAMETROS cmd.Parameters.AddWithValue("@Logradouro", logradouro); cmd.Parameters.AddWithValue("@Numero", numero); cmd.Parameters.AddWithValue("@Cidade", cidade); cmd.Parameters.AddWithValue("@Estado", uf); //EXECUTA OS PARAMETROS :) //E RECUPERAR ID APOS INSERÇÃO IdRetorno = cmd.ExecuteScalar().ToString(); // COMANDO PARA INSERIR DADOS NA TAB_FUNCIONARIO cmd2 = new SqlCommand(cmdInserFunc, conn); // PARAMETROS DA TABELA DE FUNCIONARIOS cmd2.Parameters.AddWithValue("@Nome", nome); cmd2.Parameters.AddWithValue("@Sobrenome", sobrenome); cmd2.Parameters.AddWithValue("@CPF", cpf); cmd2.Parameters.AddWithValue("@Login", Login); cmd2.Parameters.AddWithValue("@Senha", Senha); cmd2.Parameters.AddWithValue("@ADM", ADM); cmd2.Parameters.AddWithValue("@Id_Endereco", int.Parse(IdRetorno)); // EXECUTA OS COMANDOS DA TABELA DE FUNCIONARIOS. cmd2.ExecuteNonQuery(); ltlMensagem.Text = "Usuário Cadastrado - Seja Bem-vindo!";
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/- Editado Vitor Mendes terça-feira, 23 de outubro de 2012 19:51
- Marcado como Resposta Claudio 007-006 quarta-feira, 24 de outubro de 2012 19:00
Todas as Respostas
-
-
Claudio,
Tente usar da função SCOPE_IDENTITY do SQL para recuperar o ultimo id da tabela que sofreu uma inserção no contexto atual, por exemplo:
// Variaveis nome = txtNome.Text; sobrenome = txtSobrenome.Text; cpf = txtCPF.Text; Login = txtCadastrarLogin.Text; Senha = txtCadastrarSenha.Text; logradouro = txtEndereco.Text; numero = txtNumero.Text; complemento = txtComplemento.Text; cidade = txtCidade.Text; uf = dpdListEstado.Text; ADM = dpdTpCadastro.Text; // COMANDO SQL PARA INSERIR O ENDEREÇO // NOTA, O ENDEREÇO DEVE SER CARREGADO ANTES PARA GERAR FK_iD_ENDERECO ;) cmdInserEnd = @"INSERT INTO Tab_Endereco(Logradouro, Numero, Cidade, Estado) VALUES (@Logradouro, @Numero, @Cidade, @Estado); GO SELECT SCOPE_IDENTITY()"; // COMANDO SQL PARA INSERIR DADOS NA TABELA FUNCIONÁRIO cmdInserFunc = @"insert into Tab_Funcionario (Nome, Sobrenome, CPF, Id_Endereco, Login,Senha,ADM) VALUES (@Nome, @Sobrenome, @CPF, @Id_Endereco, @Login, @Senha, @ADM)"; strConn = ConfigurationManager.ConnectionStrings["infomais"].ConnectionString; // INSTANCIA A STRCONN, CRIANDO UMA STRING PARA EXECUTAR A CONEXÃO conn = new SqlConnection(strConn); // CRIA O "COMMAND" PARA INSERIR OS DADOS NA TABELA ENDEREÇO cmd = new SqlCommand(cmdInserEnd, conn); // ABRE A CONEXÃO COM O BANCO DE DADOS conn.Open(); // DEFINE OS PARAMETROS cmd.Parameters.AddWithValue("@Logradouro", logradouro); cmd.Parameters.AddWithValue("@Numero", numero); cmd.Parameters.AddWithValue("@Cidade", cidade); cmd.Parameters.AddWithValue("@Estado", uf); //EXECUTA OS PARAMETROS :) //E RECUPERAR ID APOS INSERÇÃO IdRetorno = cmd.ExecuteScalar().ToString(); // COMANDO PARA INSERIR DADOS NA TAB_FUNCIONARIO cmd2 = new SqlCommand(cmdInserFunc, conn); // PARAMETROS DA TABELA DE FUNCIONARIOS cmd2.Parameters.AddWithValue("@Nome", nome); cmd2.Parameters.AddWithValue("@Sobrenome", sobrenome); cmd2.Parameters.AddWithValue("@CPF", cpf); cmd2.Parameters.AddWithValue("@Login", Login); cmd2.Parameters.AddWithValue("@Senha", Senha); cmd2.Parameters.AddWithValue("@ADM", ADM); cmd2.Parameters.AddWithValue("@Id_Endereco", int.Parse(IdRetorno)); // EXECUTA OS COMANDOS DA TABELA DE FUNCIONARIOS. cmd2.ExecuteNonQuery(); ltlMensagem.Text = "Usuário Cadastrado - Seja Bem-vindo!";
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/- Editado Vitor Mendes terça-feira, 23 de outubro de 2012 19:51
- Marcado como Resposta Claudio 007-006 quarta-feira, 24 de outubro de 2012 19:00