Como popular várias tabelas ao mesmo tempo em C# utilizando modelo em camadas

25/05/2010

0

 Sou novo na programação ASP.NET C# e logo no meu primeiro projeto já estou dando aquela penada! Tenho uma estrutura de banco onde tenho uma tabela Candidato, Endereço e Usuário. A tabela de Candidato tem uma foreing key de usuário e Endereço, porém no meu form cadastro simultâneo por meio de abas todos estes dados. Basicamente quando chamo o evento de salvar tenho que na minha camada de dados cadastrar usuário no banco (as chaves são incremento automático), armazenar a primary key, cadastrar o endereço, armazenar a primary key, e depois cadastrar o candidato com as keys criadas acima. O código está mais ou menos assim: public class CandidatoDAO { public bool Inserir(Entity.Candidato candidato) {  SqlConnection conn = Conexao.Conn; //Fica de olho no ; SqlCommand cmd = new SqlCommand("DECLARE @UltId INT; Insert Into Endereco (Logradouro, Bairro, Cidade, UF, Pais, CEP) values (@Logradouro, @Bairro, @Cidade, @UF, @Pais, @CEP); select @UltId = SCOPE_IDENTITY()", conn); cmd.Parameters.AddWithValue("@Logradouro", candidato.Endereco.Logradouro); cmd.Parameters.AddWithValue("@Bairro", candidato.Endereco.Bairro); cmd.Parameters.AddWithValue("@Cidade", candidato.Endereco.Cidade); cmd.Parameters.AddWithValue("@UF", candidato.Endereco.Uf); cmd.Parameters.AddWithValue("@Pais", candidato.Endereco.Pais); cmd.Parameters.AddWithValue("@CEP", candidato.Endereco.Cep); SqlCommand cmd2 = new SqlCommand("DECLARE @UltId INT; Insert into Usuario (Login, Senha, TipoUsuario, Ativo) values (@Login, @Senha, @TipoUsuario, @Ativo); select @UltId = SCOPE_IDENTITY()", conn); cmd.Parameters.AddWithValue("@Login", candidato.Usuario.Login); cmd.Parameters.AddWithValue("@Senha", candidato.Usuario.Senha); cmd.Parameters.AddWithValue("@TipoUsuario", candidato.Usuario.TipoUsuario); cmd.Parameters.AddWithValue("@Ativo", candidato.Usuario.Ativo); SqlCommand cmd3 = new SqlCommand("Insert into Candidato (Nome, Telefone, Celular, CPF, Nascimento, Sexo, EstadoCivil, Email, Endereco, NFilhos, CNH, Ativo, Usuario) " + "values (@Nome, @Telefone, @Celular, @CPF, @Nascimento, @Sexo, @EstadoCivil, @Email, @Endereco, @NFilhos, @CNH, @Ativo, @Usuario)", conn); cmd3.Parameters.AddWithValue("@Nome", candidato.Nome); //@EstadoCivil, @Email, @Endereco, @NFilhos, @CNH, @Escolaridade, @Ativo, @Usuario cmd3.Parameters.AddWithValue("@Telefone", candidato.Telefone); cmd3.Parameters.AddWithValue("@Celular", candidato.Celular); cmd3.Parameters.AddWithValue("@CPF", candidato.Cpf); cmd3.Parameters.AddWithValue("@Nascimento", candidato.Nascimento); cmd3.Parameters.AddWithValue("@Sexo", candidato.Sexo); cmd3.Parameters.AddWithValue("@EstadoCivil", candidato.EstadoCivil); cmd3.Parameters.AddWithValue("@Email", candidato.Email); cmd3.Parameters.AddWithValue("@NFilhos", candidato.NFilhos); cmd3.Parameters.AddWithValue("@CNH", candidato.Cnh); cmd3.Parameters.AddWithValue("@Ativo", candidato.Ativo); try { conn.Open(); string EndId = cmd.ExecuteScalar(); string UsuId = cmd2.ExecuteScalar(); cmd3.Parameters.AddWithValue("@Usuario", UsuId); cmd3.Parameters.AddWithValue("@Endereco", EndId); cmd3.ExecuteNonQuery; return true; } catch (Exception ex) { return false; } finally { conn.Close(); } }   Alguém sabe um método melhor, que funcione e mais acadêmico de fazer esta operação??   Desde já agradeço a ajuda!
Arthur

Arthur

Responder

Posts

25/05/2010

Netasper

Esta faltando um Transação ai também!!!
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