交易计数不匹配 - MARS批次仍处于活动状态

时间:2016-11-11 20:27:19

标签: c# stored-procedures asp.net-core sqlcommand

我在c#app的连接字符串中有MultipleActiveResultSets=true。我已经发现我可以将其设置为false以防止出现此错误。我试图弄清楚如何修改我的存储过程以使用MultipleActiveResultSets=true

有问题的存储过程是一个相当简单的存储过程,可以毫无问题地从C#应用程序执行99%的时间。但是,有几次,我在执行时记录了以下错误。

EXECUTE之后的事务计数表示BEGIN和COMMIT语句的数量不匹配。先前计数= 0,当前计数= 1.在批处理结束时,在MARS批处理中启动的事务仍处于活动状态。该事务将被回滚。

存储过程代码:

begin try 
begin transaction 
    -- create @NewIDs to hold inserted IDs -- hopefully stop any issues related to @@IDENTITY 
    declare @NewIDs table (MyNewID int)

    insert into users       
    output inserted.id into @NewIDs
    values 
    (
        LTRIM(RTRIM(@Username)), 
        'nothing', 
        'nothing', 
        LTRIM(RTRIM(@Email)), 
        @Phone, 
        @ProfileID, 
        LTRIM(RTRIM(@FirstName)), 
        LTRIM(RTRIM(@LastName)), 
        LTRIM(RTRIM(@SearchName)),          
        @Password,           
        GETDATE()
    )

    declare @UserID int
    select top 1 @UserID = MyNewID from @NewIDs

    select @retValue = @UserID 

commit transaction  
return @retValue
end try 
begin catch 
    if @@TRANCOUNT > 0
        rollback transaction

    set @retValue = 0
    return @retValue    
end catch

0 个答案:

没有答案