交易未设置



出于某种原因,SqlCommand.Transaction没有设置。设置它肯定被调用的代码(在调试器中进行了验证(,但是设置了属性后,该属性仍然为null

这是代码...

cmd.Connection = cmd.Connection ?? Connection;
cmd.Transaction = cmd.Transaction ?? Transaction;
if (cmd.Transaction == null && Transaction != null)
{
    var t = Transaction;
    cmd.Transaction = t;
}

交易的定义...

private SqlTransaction Transaction { get; set; }

我添加了if语句,以防该问题是cocece operator(??(,但似乎没有帮助(没想到它,但现在抓住了稻草(。

我查看了SqlCommand.Transaction的C#代码,并且在某些路径上无法设置该字段,但是在这种情况下,抛出了一个例外,更不用说无论如何都不应满足条件(SQLCommand。CS源代码(。

任何建议都将不胜感激。

我确实确定了sqltransaction.connection为null。

这就是问题所在。您可能会设置cmd.Transaction属性确定,但是当您读出它时,SqlCommand将检查cmd.Transaction.Connection属性,如果它为null,则将cmd.Transaction设置为NULL。这可能使您似乎从未将其设置为一开始。请注意,在这种情况下,它不会引起例外。这是相关的源代码。

new public SqlTransaction Transaction
{
    get 
    { 
        if ((null != _transaction) && (null == _transaction.Connection))
        { 
            _transaction = null;
        } 
        return _transaction;
    } 
    /* snip */
}

最新更新