STOP TRANSACAO SQL

FELIPEDRONI 20/02/2013 09:54:06
#419386
Bom dia Pessoas!

é o seguinte, tenho uma aplicação que faz consultas SQL em outros servidores(externos) .
O meu problema é quando rodo um select ou qualquer outra query que vai me retornar, muitos
dados a aplicação demora muito, oque eu gostaria de fazer é um botão que de um STOP nessa transação,
mas ai vem outro problema, pq a aplicação fica travada em quanto não termina de rodar a query.
Dei uma vasculhada no forum mas não encontrei algo do tipo, caso já tenha um tópico com isso me desculpem
pela redundancia.

Alguém já fez algo do tipo, ou tem idéia de como fazer?
ALTAIR148 20/02/2013 10:20:41
#419390
Resposta escolhida
Bom dia,

Eu nunca fiz nada do tipo, mas [Ô]acredito[Ô] não tenho certeza.... O seguinte, nesse caso você teria que chamar essa rotina através de thread assim ele não iria congelar a tela sendo assim possível cancelar a ação.
JABA 20/02/2013 11:05:33
#419393
isso aqui resolve o seu problema:

http://www.macoratti.net/12/03/c_oasql.htm
AJSO 20/02/2013 11:12:19
#419394
Caro FELIPEDRONI

Isso realmente é um pouco complexo pois para parara ou não continuar seu processo dentro de um banco SQL somente com o comando KILL matando o processo...

Uma forma menos forçada seria cosntruir uma STORED PROCEDURE e identificar alguns processos que possa encerrar de forma a não comprometer seu banco....

Dentro de sua query utilize alguns comando que possa intferromper de forma ordenada e sistêmica sua consulta.............

Estrutura de uma consulta:


BEGIN TRY
BEGIN TRANSACTION
/* executar todas as suas instruções SQL */
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH


Com isso não terá problemas de demora ou pode ser interrompido por timeout..........




Boa Sorte

OCELOT 20/02/2013 12:31:35
#419403
O objeto SqlCommand possui um método chamado Cancel que é exatamente para isso, cancelar o comando que está sendo executado. Só que é claro que para poder fazer isso você precisa estar rodando a Query em uma outra Thread ou então você não vai conseguir chamar o Cancel
Tópico encerrado , respostas não são mais permitidas