Fórum Dúvida sobre Insert em 3 tabelas com controle de transação - CSharp e SQL Server #516986
16/04/2015
0
Estou desenvolvendo uma aplicação de controle de estoque em 3 camadas (AcesssoDados, Negocios, ObjetoTransferencia e Apresentacao) bem simples pois sou iniciante em C#. Minha base no SQL Server
possui 3 tabelas ()Pesssoa, PessoaFisica e Cliente) juntamente com 3 procedures individuais para dar um insert em cada tabela.
O problema é que quando eu dar um insert no form de cadastro de clientes, ele terá que chamar 3 funções (InserirCliente, InserirPessoaFisica e InserirPessoa) separadamente
de cada classe da camada de negocios e precisava usar um controle de transação no C# para assegurar que o insert será dado nas 3 tabelas e dar um rollback caso ocorra alguma
falha ao inserir em uma das tabelas.
Estou com dificuldades em usar o SqlTransaction pois ele pede conexão e cmd, mas isso fica em outra camada e se eu implementar isso no form
ficará estranho, meio repetido o código e não sei se é o correto...
Postei meu projeto de C# no seguinte link: https://onedrive.live.com/?cid=40838E65B9F8787E&id=40838e65b9f8787e%21120
Alguém sabe como me ajudar a resolver este problema?
Obrigado :)
Jalber Romano
Curtir tópico
+ 0Post mais votado
24/04/2015
Analisei melhor a sua solicitação e ao meu ver tem como fazer isso sim.
Terá que trabalhar com transação no C#
private static void ExecuteSqlTransaction(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;
// Starta a Transação
transaction = connection.BeginTransaction("Exemplo de Transaction");
command.Connection = connection;
command.Transaction = transaction;
try
{
command.CommandText =
"Stored Procedure 1";
command.ExecuteNonQuery();
command.CommandText =
"Stored Procedure 2";
command.ExecuteNonQuery();
command.CommandText =
"Stored Procedure 3";
command.ExecuteNonQuery();
// Persistindo os dados no banco
transaction.Commit();
}
catch (Exception ex)
{
// Cancelando a transação
transaction.Rollback();
}
}
}Alisson Santos
Gostei + 1
Mais Posts
21/04/2015
Alisson Santos
Se não me engano a Store Procedure não existe transação, quando executado a procedure ele já aplica a ação.
Caso queira controlar as transações terá que utilizar o insert fora da procedure.
Agora o que pode fazer é caso tenha algum tipo de erro pode excluir o ultimo registro inserido
Gostei + 0
22/04/2015
Jalber Romano
Gostei + 0
05/05/2015
Jalber Romano
Muito boa a sua dica... Era disso que eu precisava...
Que Deus te ilumine sempre.
Muito obrigado! :)
Gostei + 0
05/05/2015
Jalber Romano
#Classe pessoaBusiness (as outras duas classes estão implementadas iguais)
[img]http://arquivo.devmedia.com.br/forum/imagem/413444-20150505-220930.png[/img]
#Classe FACADE que juntará os Inserts das três classes e que precisa de controle de transação
[img]http://arquivo.devmedia.com.br/forum/imagem/413444-20150505-221143.png[/img]
Preciso controlar a transação dos 3 Inserts na classe ClienteFacade só que eu não estou conseguindo usar a mesma função (command, etc) que as classes das regras de negócio...
Isso que tá pegando...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)