Transação FireBird C Sharp

07/04/2017

0

Bom dia, meu projeto está em n camadas, e tem a camada de Data Provider que só abre a FbConnection e executa o comando passado (cmd.ExecuteNonQuery()), e minha camada BLL faz a chamada dela pra inserir, alterar, excluir registros, porém queria abrir uma transação, mas não estou conseguindo com essa estrutura, porque ficou bem engessada, gostaria de saber se tem alguma forma de abrir uma conexão global?

Por exemplo, hoje está assim, e quando estou inserindo uma lista de registros, abre a conexão pra cada comando insert.

FbConnection connection = new FbConnection(ConnectionString); 
connection.Open();
FbCommand cmd = new FbCommand(sql, connection);
cmd.Dispose();


Agradeço desde já a ajuda.
Natália

Natália

Responder

Post mais votado

12/04/2017

Olá, Natália. Tudo bem?

A primeira coisa que deve ser avaliada aí é como deixar a conexão como Singleton, ou seja, esse objeto do tipo FBConnection não precisa ser instanciado em todos os métodos. Ao invés disso, você deve ter apenas uma instância para toda a aplicação.

Em seguida, você pode criar um método para fazer esse insert na forma de batch, ou seja, um lote de inserts de uma única vez, quando isso for necessário. Nele você deve abrir a conexão, iniciar a transação, fazer um loop e a cada iteração realizar o comando de insert. Ao final você faz o commit da transação.

Abraço.

Joel Rodrigues

Joel Rodrigues
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