Array
(
)

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

Arthur
   - 25 mai 2010

 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!

Netasper
   - 25 mai 2010

Esta faltando um Transação ai também!!!