我正在将一组 T-SQL 存储过程移植到 C#/CLR。在 T-SQL 中,我们使用 XACT_STATE() 来确定错误是否需要回滚到保存点或完全回滚事务。
我无法使用System.Data.SqlClient.SqlTransaction
或System.Transactions.TransactionScope
对象找到对交易的等效检查。
有谁知道如何从 C#/CLR 中检查事务状态?
我正在将一组 T-SQL 存储过程移植到 C#/CLR。在 T-SQL 中,我们使用 XACT_STATE() 来确定错误是否需要回滚到保存点或完全回滚事务。
我无法使用System.Data.SqlClient.SqlTransaction
或System.Transactions.TransactionScope
对象找到对交易的等效检查。
有谁知道如何从 C#/CLR 中检查事务状态?
XACT_STATE()
不是什么SqlClient
特别有洞察力的东西,很像交易层面。所以,只需使用 查询它SqlCommand
。是的你可以。但是,它取决于System.Data.SqlClient程序集的内部结构,因此我不推荐它。如果确实需要,我会重新评估 CLR 是否真的是执行您正在尝试执行的操作的正确方法。
SqlTransaction实际上只是SqlInternalTransaction类的包装类。SqlInternalTransaction类已经为您跟踪了事务的状态(如果没有,那么SqlClient如何知道是否回滚?)
您将需要使用反射来获取SqlInternalTransaction的实例,我不建议在 CLR 过程中这样做,因为这在性能方面可能非常昂贵 - 特别是如果它被多次调用。
话虽如此,这就是您的操作方法。