C#Thread.Abort()+ ODBC连接

时间:2015-06-16 06:59:38

标签: c# multithreading odbc

如果我在当前正在执行ODBC命令的线程上调用Thread.Abort()(在C#/ .NET中)会发生什么情况(特别是针对MSSQL和Oracle,但一般情况下)?该命令会被取消吗?数据库服务器是否会识别连接的另一端没有任何内容并终止进程(再次,特别是MSSQL和Oracle)?或者我是否需要先在连接上明确调用Cancel()

我的目标是确保我连接的数据库的安全性,如果应用程序发生最坏的情况(或者我可以捕获和响应的最糟糕的情况,如系统关闭等)。

我想防御性地编程,并尽可能尝试发出取消(),但我还是想知道这种行为。

1 个答案:

答案 0 :(得分:0)

如果您想确保取消SQL命令,为什么不使用TransactionScope.Dispose()方法或只是不Complete交易?它适用于ThreadProcess以及此类抽象,Thread取消和SQL命令之间不会有比赛。

另外,正如评论中所述,您的SQL驱动程序可以在其他Thread中工作,甚至可以是非托管代码,因此取消Thread不会影响SQL命令,而您确实需要Cancel()您的连接或命令。