2009-10-20 6 views
0

J'ai créé une boucle jusqu'à 100 pour insérer des données dans db. mais quand je ferme mon navigateur j'espère que ça s'arrête mais en fond ça continue de boucler et de remplir mon db. comment puis-je l'arrêter?stop sql insert dans une boucle for ou while

merci

+0

À quoi ressemble votre code? –

Répondre

4

Aucune garantie que cela fonctionnerait, mais vous pouvez essayer la propriété HttpResponse.IsClientConnected.

for (int i = 0; i < 100; i++) 
{ 
    if (!Response.IsClientConnected) break; 

    // insert the next row 
} 
+0

Wow! Je vous aime bien. Cela marche. Merci beaucoup. –

0

Arrêtez SQL Server et/ou IIS.

Modifier: ... en supposant que vous ayez fait une erreur de programmation, votre DB continue à se remplir et vous avez désespérément envie de l'arrêter - c'est ainsi que j'ai compris votre question.

+0

espérons que cela fonctionne avec iis arrêter parce que le serveur SQL est distant. Merci –

+0

J'aime tester une grosse procédure .. mais quand je veux l'arrêter. –

+0

OK, dans ce cas, la solution la plus élégante serait probablement de mettre le code INSERT dans un thread d'arrière-plan et de faire un bouton STOP sur votre page aspx qui arrête ce thread. – Heinzi

2

Si vous faites cela sur le serveur dans une seule requête http (par exemple, en répondant à un événement de bouton dans votre code-behind), le serveur ne se soucie pas vraiment du navigateur. Si vous voulez que les insertions s'arrêtent quand le navigateur s'arrête, je suggérerais peut-être de le faire via une boucle ajax - mais notez que cela sera considérablement plus lent, car vous aurez 100 allers-retours et 100 ensembles de traitement séparés sur le serveur .

1

Que diriez-vous d'une solution sparadrap:

Laissez votre envoyer la page Web keep-alive AJAX appelle toutes les 5 secondes ou si le serveur et interrompra si le maintenir en vie est pas reçu :)

3

Il semble Comme vous avez démarré ce processus à partir d'un formulaire ASP.NET avec le code côté serveur faisant la boucle en réponse à quelque chose (soit le formulaire ASP.NET de chargement, ou en cliquant sur un bouton etc).

Notez que la fermeture de la fenêtre de votre navigateur n'arrêtera aucun processus de code à long terme que vous avez appelé sur le "serveur". Bien que cela fonctionne sur la même machine, le "serveur" ici est le processus IIS/Cassini qui sert votre page Web au "client" (votre navigateur). Pour arrêter ceci, vous devez arrêter/éteindre l'IIS ou Cassini (petit serveur Web de Cassini utilisé par Visual Studio lors de l'exécution d'une application web sur votre machine de développement locale), ou arrêter/arrêter SQL Server processus.

EDIT: J'ai noté les sous-cotations pour l'autre réponse que mentionne l'arrêt de IIS/SQL. Ceci, bien sûr, est un mécanisme de «dernier souffle» pour arrêter un processus de longue durée invoqué par le «client» mais s'exécutant sur le «serveur». Si cela devait être fait dans une "vraie" application, et que vous souhaitiez permettre à l'utilisateur d'annuler une application de longue durée, une approche telle que suggérée par Marc serait nécessaire (ie utiliser AJAX, "interroger" la page web avec AJAX "actualise" et répond à la saisie ultérieure de l'utilisateur (c'est-à-dire le clic sur le bouton)).

Questions connexes