6

相關:How can you cancel a SQL Server execution process programmatically用戶如何取消長時間運行的查詢?

我創建了一個基本上是數據庫(Sql Server)中的數據查看器的應用程序(Windows,WPF)。該應用程序沒有編輯功能。

該應用程序提供了基於來自用戶的輸入來搜索記錄的能力。大多數情況下,行通過關鍵列進行搜索並運行速度非常快。但是表中的一列是一個很大的文本字段,我想提供基於該字段內容搜索行的功能。因此,生成的sql查詢可能需要一些時間才能完成。我想提供一個停止按鈕,以便用戶可以放棄搜索,如果需要的話。我放在上面的鏈接使用Kill命令殺死Sql服務器中的spid,但我不確定這是如何工作的,因爲我使用的是實體框架(4.1)

例如,假設a有

var docs = from document in context.Documents 
      join header in context.Headers 
      on document.DocumentID equals header.HeaderID into headerGroup 
      from subdoc in headerGroup.DefaultIfEmpty() 
      where document.LargeTextColumn.Contains("search term") 
      select (...) 

foreach (var item in docs) 
{ 
    //Do something with item here 
} 

由於查詢並沒有真正發生,直到我通過它迭代與foreach語句,我怎麼能提供一個「停止查詢」按鈕,用戶:類似這樣的質疑呢?這與Sql Server Management Studio中的停止按鈕類似。

這可能嗎?

+0

[取消實體框架查詢(http://stackoverflow.com/questions/5143957/cancelling-an-entity-framework-query)的可能重複 – 2011-05-13 17:05:13

回答

2
+0

我看到題。所以我唯一的選擇是創建一個線程,然後在該線程上執行查詢,然後中止該線程,如果我希望它停止? – 2011-05-13 17:31:11

+1

是的。您必須從另一個線程中取消數據庫操作。 – Olaf 2011-05-13 17:35:38