2011-04-01 83 views
7

我正在從一個SQL服務器調用存儲過程的C#應用​​程序。根據用戶輸入的搜索參數,存儲過程可能需要一段時間並返回許多記錄。Linq - 中斷執行存儲過程

我想實現一個取消按鈕,以便用戶可以取消執行存儲過程,當它需要很長時間。我在新線程中運行對存儲過程的調用,以便在存儲過程需要一段時間時GUI不會受到影響。我讀了關於中止一個線程,但發現許多拒絕有關使用中止的意見。

可能的解決方案,我認爲的:

  • 有一個共同的方式來停止執行存儲過程(這是在C#代碼的方法)
  • 有沒有更好的方式來停止線程? (我也發現Thread.Interrupt(),但這隻適用於封鎖的線程,而不是在運行代碼)
  • 我可以放棄線程並啓動一個新的但後來不必要的數據庫和網絡資源
  • Is there一種從服務器端停止存儲過程的方法?
+0

瞎猜,但並斷開上DataContext的連接,或者在一個TransactionScope包裹並呼叫「回滾」停止了嗎? – Ocelot20 2011-04-06 13:14:56

回答

0

您可以嘗試放棄進程服務器端,但它需要高級privilesdge(服務器管理員),所以它在大多數共享下是不可行的。

線程流產可以工作(不推薦),但我不確定數據庫會停止處理。

最後我不確定有沒有辦法做到這一點。

0

您可以中止該線程,但該查詢將仍然運行,因爲它由SQL服務器託管。