none
您好,关于Entity Framework 的SQL Transition执行错误 : EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 RRS feed

  • 问题

  • 我正尝试使用Entity Framework调用数据库中已存在的存储过程,但是在执行过程中却遇到

    EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配

    上一计数 = 1,当前计数 = 0。

    这个存储过程如果commit了不会出错,一旦回滚,就会出现上面的错误,存储过程代码如下:

    if exists (select 1 from sysobjects where [name]='proc_onBBS_PublishArticle')
    drop proc proc_onBBS_PublishArticle;
    go
    create proc proc_onBBS_PublishArticle
    @sectionName nvarchar(20),
    @userName nvarchar(20),
    @ip nvarchar(50),
    @title nvarchar(50),
    @content nvarchar(3000)
    as

    declare @errorCount int=0,@rowCount int=0;
    begin tran
    insert into [Article] ([UserName],[SectionName],[Title],[Content_],[IP],[LastReplyUser]) 
    values (@userName,@sectionName,@title,@content,@ip,@userName);
    set @errorCount+=@@ERROR;
    set @rowCount+=@@ROWCOUNT;

    update [Section] set [ArticleCount]+=1 where [Name]=@sectionName;
    set @errorCount+=@@ERROR;
    set @rowCount+=@@ROWCOUNT;

    if(@errorCount<=0 and @rowCount=1)  //此处rowCount正常应该是2,测试时更改为1,事务提交失败,就出现了上述错误
    begin
    commit tran
    return 1
    end
    rollback tran
    return 0
    go


    我也查过相关资料了,说这个错误是因为begin tran和commit或者rollback不匹配造成的,但是我这里有commit和rollback也不可能啊

    另外,我如果直接在SQL Management studio中执行上述的存错过程就不会报错,在我的MVC项目里使用EF执行就会报错


    2014年1月19日 11:18

答案

  • 用的是EF6 ,,直接映射存储过程 DB.存储过程名 调用的,问题已经解决了,不过还是不知道原因,之前存储过程没有设置保存点,现在设置了保存点回滚直接回滚到保存点就不会报错,但是之前也就是上面那种写法,在SQL2012 的管理工具里执行却不会出错,用EF调用就异常了
    2014年1月20日 10:37

全部回复