Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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# SQL-等待回滚完成_C#_Sql_Sql Server_Transactions_Sqlexception - Fatal编程技术网

C# SQL-等待回滚完成

C# SQL-等待回滚完成,c#,sql,sql-server,transactions,sqlexception,C#,Sql,Sql Server,Transactions,Sqlexception,我正在使用超时300秒的committeabletransaction删除大量记录。有时我会出错 SqlException:超时已过期。操作完成前已过超时时间,或者服务器没有响应 似乎在超时之后,SQL正在自动执行回滚,回滚需要约200秒才能完成 但是我当前的C#code捕获了SqlException并检查TransactionStatus(这是中止的)并继续进行。由于回滚正在进行中,我应该等到回滚完成。有没有办法找到回滚状态?或者我该如何处理这种情况?从这里开始 CommitteableTr

我正在使用超时300秒的
committeabletransaction
删除大量记录。有时我会出错

SqlException:超时已过期。操作完成前已过超时时间,或者服务器没有响应

似乎在超时之后,SQL正在自动执行回滚,回滚需要约200秒才能完成

但是我当前的C#code捕获了
SqlException
并检查
TransactionStatus
(这是
中止的
)并继续进行。由于回滚正在进行中,我应该等到回滚完成。有没有办法找到回滚状态?或者我该如何处理这种情况?

从这里开始

CommitteableTransaction对象可以跨函数调用和 线程。但是,这取决于应用程序开发人员来处理 异常,并在发生异常时特别调用Rollback方法 失败

我认为可以在捕获块中显式调用SqlException。因此,您需要等待完成回滚操作

从这里开始

CommitteableTransaction对象可以跨函数调用和 线程。但是,这取决于应用程序开发人员来处理 异常,并在发生异常时特别调用Rollback方法 失败


我认为可以在捕获块中显式调用SqlException。因此,您需要等待完成回滚操作

您也可以手动设置超时。请注意,回滚不是由C代码启动的。SQL server似乎在事务超时后自动执行回滚。@WPFLierner,SQL server中没有查询超时之类的东西-这纯粹是客户端的概念。基本上,在将每个语句发送到SQL Server之后,数据提供程序层将等待指定的时间段,如果该时间段过期,则向连接发送低级的
Abort
命令。所以取消处理的不是你的代码,是的,但它是客户端代码。@RogerWolf,我理解你的意思。在客户端,是否有方法等待回滚结束?您也可以手动设置超时。请注意,回滚不是由C代码启动的。SQL server似乎在事务超时后自动执行回滚。@WPFLierner,SQL server中没有查询超时之类的东西-这纯粹是客户端的概念。基本上,在将每个语句发送到SQL Server之后,数据提供程序层将等待指定的时间段,如果该时间段过期,则向连接发送低级的
Abort
命令。所以取消处理的不是你的代码,是的,但它是客户端代码。@RogerWolf,我理解你的意思。在客户端,是否有方法等待回滚结束?在SqlException处理程序中尝试了Transaction.rollback(异常),但它没有等待回滚结束。在调用Rollback之前,检查了异常处理程序中的事务状态,它已被中止。尝试了SqlException处理程序中的Transaction.Rollback(异常),但它没有等待回滚结束。在调用回滚之前,检查异常处理程序中的事务状态,它已经中止。