出于某种原因,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 */
}