我试图提交一个事务到我的Sql Server 2008数据库-首先是2个insert,然后是两个更新,然而,一旦它尝试执行第一个更新,我得到以下错误:
ExecuteNonQuery要求命令具有事务,当分配给命令的连接处于挂起的本地事务中时。命令的Transaction属性尚未初始化。
下面是代码,为了简洁起见稍微编辑了一下:
using (_cn)
{
_cn.Open();
IDbTransaction transaction = _cn.BeginTransaction();
topicId = (int)_cn.Query<decimal>(qAddTopic, new { pForumId = topic.ForumId }, transaction).Single();
postId = (int)_cn.Query<decimal>(qAddPost, new { pTopicId = topicId }, transaction).Single();
_cn.Execute(qUpdateForums, new { pLastPostId = postId });
_cn.Execute((qUpdateSiteTotals));
transaction.Commit();
}
前2个插入工作正常,但一旦它试图执行其中一个更新,没有乐趣。
3条答案
按热度按时间fwzugrvs1#
我已经找到了问题所在--我只是在调用更新时缺少了事务参数,而在之前的插入中,我已经包含了
IDbTransaction
参数!我的错!示例:
evrscar22#
Microsoft建议尽可能在数据库IDbTransaction上使用TransactionScope。下面的代码应该可以工作,假设您的SQL没有任何问题,并且托管提供程序自动在环境事务中登记-这是行为良好的提供程序需要做的事情。
kiayqfof3#
这就是我的问题所在。我有这个代码,一切看起来都很好。
我正在办理交易手续。我确信交易不是空的。但它仍然会给我错误。
事实证明,如果我在
transaction
参数前面加上null
,param
参数应该在的位置,那么它就可以工作了。它似乎是将transaction参数作为param参数,因此它认为我没有提供transaction。