2015-06-16 67 views
0

如果我叫Thread.Abort()(在C#/。NET)上當前正在執行的ODBC命令線程(專門針對MSSQL和Oracle,而且通常情況下),會發生什麼?命令會被取消嗎?將DB服務器承認沒有什麼在連接的另一端,並終止該進程(再次,特別是MSSQL和Oracle)?或者我需要先在連接上明確呼叫Cancel()C#Thread.Abort的()+ ODBC連接

我的目標是確保我連接到如果最壞的情況應該發生在我的應用程序的數據庫的安全性(或者說我可以捕捉和響應,如系統關閉等最差)。

我想防守程序,然後嘗試發出取消()如果有可能,但我想反正知道的行爲。

+1

我想你必須調用取消 –

+1

Thread.Abort()應該只在正在執行的代碼被管理時才能工作......所以實際上它取決於驅動程序是如何構建的,如果是託管代碼或它是非託管代碼。如果驅動程序是非託管代碼,則它不受'Thread.Abort()'(例如,請參閱http://stackoverflow.com/q/2781484/613130) – xanatos

+0

請參閱http://stackoverflow.com/q/對於嘗試'Thread.Abort()'和'SqlDataAdapter'(提示:'SqlDataAdapter'獲勝:-))的人來說是1401532/613130 – xanatos

回答

0

如果要確保取消SQL命令,爲什麼不使用TransactionScope.Dispose()方法或根本就沒有Complete事務?它的工作方式高於ThreadProcess等抽象,並且在Thread取消和SQL命令之間將沒有競爭。

此外,如評論指出,您的SQL驅動程序可以在其他Thread工作,甚至可以是一個非託管代碼,所以取消Thread不會影響SQL命令,你真的需要Cancel()您的連接或命令。