首页 > 解决方案 > 如何检查 SqlCommand 是否在事务中

问题描述

SqlCommand我有一个使用异常处理程序执行的标准例程。但是,如果在此例程中引发异常,那么如果在事务中调用此标准例程,我将无法进行回滚。那么如何检查这个标准例程是否放置在事务中?什么是正确的方法?到目前为止,我已经google了很多...

我是否必须在我的异常处理程序中为强制整个事务回滚的标准例程抛出一个新异常?

我的标准例程如下:

try
    using (SqlConnection con = new SqlConnection(dbCon))
    {
        using (SqlCommand cmd = new SqlCommand(SQL, con))
        {
            con.Open();
            cmd.CommandTimeout = 600;
            cmd.ExecuteScalar();
        }
    }
}
catch (Exception ex)
{
    // do some stuff here
    maybe check for existence in a transaction here
}

我的整体交易如下所示:

using (SqlConnection con = new SqlConnection(dbCon))
{
    con.Open();
    string TransactionName = "TransactionName";
    using (SqlTransaction sqlTransaction = con.BeginTransaction(TransactionName))
    {
        try
        {
            // do some stuff here and call the standard routine here several times...
        }
        catch (Exception vDBException)
        {
            DB.getInstance().RollbackTransaction(sqlTransaction, TransactionName);
        }
    }
}

我试图利用select @@trancount没有成功。

我也尝试sys.sysprocesses从 SQL Server 进行检查,但没有成功。

我真的希望有人能告诉我正确的方向。

标签: c#asp.netsql-servertransactions

解决方案


推荐阅读