【问题标题】:Transaction count after EXECUTE indicates mismatching number of BEGIN and COMMIT statementsEXECUTE 之后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配
【发布时间】:2015-06-23 09:20:01
【问题描述】:

当我执行下面的存储过程时,我得到了这个错误:

System.Data.SqlClient.SqlException:执行后的事务计数 表示 BEGIN 和 COMMIT 语句的数量不匹配。 先前计数 = 0,当前计数 = 1。

代码:

create procedure [dbo].[sp_crm_diler_master]
(
            @Fullname varchar(100),
            @Email varchar(50),
            @Mobile varchar(12),
            @qualification varchar(50),
            @presentaddress varchar(250),
            @permanentaddress varchar(250),
            @location varchar(50),
            @skills varchar(100),
            @Dob varchar(15),
            @myphoto varbinary(Max),
            @uniqueid varchar(25),
            @Message varchar(150) output
)
AS
BEGIN
 if not exists (select emailid,phone from crm_masterdata where emailid=@Email And phone=@Mobile)
  begin
 begin transaction
 declare @small smalldatetime = (select  CAST(@Dob as smalldatetime))
 declare @todaydate datetime=(select getdate())
  insert into crm_masterdata(uniqueid,fullname,phone,dob,photo,emailid,qualification,location,present_address,permanent_address,skillsets,datasource,entrydate,active)
 values(@uniqueid,@Fullname,@Mobile,@small,@myphoto,@Email,@qualification,@location,@presentaddress,@permanentaddress,@skills,'reception',@todaydate,1)
Set @Message=' Registration Successfull,Please Login'
end
 else
 begin
  set @Message='This User Already Registered'
  end
  end

我的错误在哪里?

【问题讨论】:

  • 您的 C# 和 asp.net 代码不相关。您的问题完全出在您的 SP 上。
  • 我已经删除了问题的不相关部分
  • 你读过错误吗?您是否在代码中搜索过提交语句?

标签: sql asp.net sql-server sql-server-2008 asp.net-mvc-4


【解决方案1】:
create procedure [dbo].[sp_crm_diler_master]
(
@Fullname       varchar(100),
@Email          varchar(50),
@Mobile         varchar(12),
@qualification  varchar(50),
@presentaddress varchar(250),
@permanentaddress varchar(250),
@location       varchar(50),
@skills         varchar(100),
@Dob            varchar(15),
@myphoto        varbinary(Max),
@uniqueid       varchar(25),
@Message        varchar(150) output
)
AS
BEGIN
  SET NOCOUNT ON;

   declare @small smalldatetime = (select  CAST(@Dob as smalldatetime));
   declare @todaydate datetime=getdate();
   declare @Error INT;

BEGIN TRANSACTION;    --<-- You need to commit it
     IF not exists (select 1 from crm_masterdata  where emailid=@Email And phone=@Mobile)
       BEGIN
            insert into crm_masterdata(uniqueid,fullname,phone,dob,photo,emailid
                     ,qualification,location,present_address,permanent_address,skillsets,datasource,entrydate,active)
            values(@uniqueid,@Fullname,@Mobile,@small,@myphoto,@Email,@qualification
                        ,@location,@presentaddress,@permanentaddress,@skills,'reception',@todaydate,1)

             SET @Error = @@ERROR;
             Set @Message =' Registration Successfull,Please Login'
       END
    ELSE
      BEGIN
          SET @Message='This User Already Registered'
      END

    IF (@Error = 0)
        COMMIT TRANSACTION; --<-- Commit tran 
    ELSE
        ROLLBACK TRANSACTION;

END

【讨论】:

    【解决方案2】:

    我没有看到与您的 BEGIN TRANSACTION 匹配的 COMMIT TRANSACTION。

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 1970-01-01
      • 2018-03-11
      • 2012-02-18
      • 2015-12-21
      • 2021-05-23
      • 2014-03-22
      • 2014-10-25
      • 2016-07-21
      相关资源
      最近更新 更多