Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Thread.Abort()+;ODBC连接_C#_Multithreading_Odbc - Fatal编程技术网

C#Thread.Abort()+;ODBC连接

C#Thread.Abort()+;ODBC连接,c#,multithreading,odbc,C#,Multithreading,Odbc,如果我在当前正在执行ODBC命令的线程上调用Thread.Abort()(在C#/.NET中),会发生什么情况(特别是针对MSSQL和Oracle,但也通常是针对MSSQL和Oracle)?命令会被取消吗?DB服务器是否会识别连接的另一端没有任何内容并终止该进程(同样,特别是MSSQL和Oracle)?或者我需要先在连接上显式调用Cancel() 我的目标是确保连接到的数据库的安全性,以防最坏的情况发生在我的应用程序上(或者我能够捕获并响应的最坏情况,如系统关闭等) 我想防御性地编写程序,如果可

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

我的目标是确保连接到的数据库的安全性,以防最坏的情况发生在我的应用程序上(或者我能够捕获并响应的最坏情况,如系统关闭等)


我想防御性地编写程序,如果可能的话,尝试发出Cancel(),但我还是想知道它的行为。

如果要确保取消SQL命令,为什么不使用该方法或干脆不执行事务?它在
线程
进程
以及类似的抽象之上工作,并且
线程
取消和SQL命令之间不会有冲突


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

我认为您必须调用Cancel
Thread.Abort()
应仅在管理正在执行的代码时工作。。。所以实际上,它取决于驱动程序是如何构建的,是托管代码还是非托管代码。如果驱动程序是非托管代码,那么它对
Thread.Abort()
(例如,请参阅)例如,对于尝试
Thread.Abort()
vs
SqlDataAdapter
(提示:
SqlDataAdapter
将:-)的人,请参阅,我想知道.NET ODBCConnection类是否足够聪明,可以捕获ThreadAbortException,并在异常被重试之前调用它自己的Cancel()方法?