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
Curtir tópico
+ 0
Responder
Posts
Clique aqui para fazer login e interagir na Comunidade :)