2010-03-05 5 views
6

Moja aplikacja ASP.NET (3.5) umożliwia użytkownikom wykonywanie złożonych zapytań, które mogą zająć do 4 minut w celu zwrócenia wyników.Jak mogę anulować zapytanie bazy danych w ASP.NET, gdy przeglądarka użytkownika się rozłączy?

Kiedy robię długie pętle kodu, sprawdzam od czasu do czasu Response.IsClientConnected(), więc mogę zakończyć tę stronę, jeśli użytkownik zamknie przeglądarkę lub kliknie przycisk zatrzymania.

Ale podczas kwerendy SQL Server, mój kod .NET jest zablokowany na wywołanie GetDataReader().

Czy istnieje prosty sposób, aby GetDataReader() asynchronicznie, więc mogę czekać na to, ale nadal sprawdzić, powiedzmy, co 5-10 sekund, aby sprawdzić, czy użytkownik jest nadal podłączony, i za kaucją na kwerendę bazy danych, jeśli Zostawiłem?

A może jest inna alternatywa, o której nie myślę?

Odpowiedz

5

można użyć SqlCommand za BeginExecuteReader uzyskać Asynch sqlreader example

nie 100% pewien, czy to jest to, czego potrzebujesz?

link showing cancel

+0

Myślę, że to jest, dzięki! Zrobię później badania i upewnię się, że to pasuje do rachunku, zanim przyjmuję. – richardtallent

+0

@ richardtallent Nigdy go nie użyłem, ale dodatkowe łącze dodane i pokazuje więcej przykładów i sugeruje użycie metody cancel w obiekcie polecenia – Pharabus

1

Sugerowałbym utworzenie obiektu, który ma metody enkapsulujące zapytanie dla metod Start() i Wait(). Wewnętrznie użyj ManualResetEvent, aby poczekać na zakończenie zapytania. Będziesz używać funkcji Set(), gdy zapytanie zostanie zakończone, a metoda WaitOne() lub WaitOne(TimeSpan ts) będzie czekać na to w twojej metodzie Wait().

Powiązane problemy