【问题标题】:Why my stored procedure is returning true even it is raising error ?为什么我的存储过程即使引发错误也会返回 true ?
【发布时间】:2017-07-25 22:12:22
【问题描述】:

为什么即使我提到如果满足某些条件,这个 SP 也会返回 TRUE,那么它应该 引发错误,但它仍然返回 true。我已经检查了条件并且它满足但仍然正确,为什么?

SP:

ALTER PROC [dbo].[usp_UpdateWithdrawal]
(
    @NITNo int,
    @WorkNo int,
    @ContractorID int,
    @IsWithDrawn bit
)

AS
BEGIN
    Begin Try

     Begin Transaction

        Declare @ExpiryDate date
        Declare @ExpiryTime time(7)

        Set @ExpiryDate= (Select convert(varchar(11), ExpiryDate, 106) from Works where NIT_No= @NITNo and WorkNo= @WorkNo)
        Set @ExpiryTime= (Select CAST(ExpiryTime as TIME(0)) from Works where NIT_No= @NITNo and WorkNo= @WorkNo)

        IF(CONVERT(varchar(11), @ExpiryDate, 106)+' '+Convert(varchar(8),CAST(@ExpiryTime as TIME(0))) < CONVERT(varchar(11), Getdate(), 106)+' '+Convert(varchar(8),CAST(Getdate() as TIME(0))))       
        Begin
            RAISERROR('Sorry, Expiry Date and Time has passed', 16, 10);
            return;
        End

        Update AppliedWorks
        Set Withdrawn= @IsWithDrawn
        Where NIT_No= @NITNo and Work_No= @WorkNo and Contractor_ID= @ContractorID and 
        CONVERT(varchar(11), @ExpiryDate, 106)+' '+Convert(varchar(8),CAST(@ExpiryTime as TIME(0))) < CONVERT(varchar(11), Getdate(), 106)+' '+Convert(varchar(8),CAST(Getdate() as TIME(0)))

        --Update Hisotry

        Declare @AppliedWorkID int
        Set @AppliedWorkID= (Select AppliedWorkID from AppliedWorks 
                             Where NIT_No= @NITNo and Work_No= @WorkNo and Contractor_ID= @ContractorID)


                Insert into AppliedWorkHistory
                (
                    AppliedWork_ID,
                    FinancialMoney,
                    AboveBelow,
                    EntryDateTime,

                    TwoPercentAmount,
                    TwoPercentBankName,
                    TwoPercentDemandDaftNo,
                    TwoPercentDemandDaftValue,
                    TwoPercentRemarks,

                    EightPercentAmount,
                    EightPercentBankName,
                    EightPercentDemandDaftNo,
                    EightPercentDemandDaftValue,
                    EightPercentRemarks, 
                    IsFinalized,
                    Withdrawn
                )
                Select @AppliedWorkID, aw.FinancialMoney, aw.AboveBelow, Getdate(), aw.TwoPercentAmount, aw.TwoPercentBankName, aw.EightPercentDemandDaftNo,
                       aw.TwoPercentDemandDaftValue, aw.TwoPercentRemarks, aw.EightPercentAmount, aw.EightPercentBankName, 
                       aw.EightPercentDemandDaftNo, aw.EightPercentDemandDaftValue, aw.EightPercentRemarks, aw.IsFinalized, @IsWithDrawn  
                from AppliedWorks aw where aw.AppliedWorkID= @AppliedWorkID



     Commit Transaction

    End Try
    Begin Catch
                Rollback transaction
    End Catch 


END;

C#:

public static bool UpdateWithdrawal(int NitNo, int WorkNo, int ContractorID, bool IsWithDrawn) { 布尔结果;

ClsDatabaseManager dbManager = ClsDatabaseManager.InitializeDbManager(Constants.Databases.TendersConnection);
try
{
    dbManager.CreateParameters(4);
    dbManager.AddParameters(0, "@NITNo", NitNo);
    dbManager.AddParameters(1, "@WorkNo", WorkNo);
    dbManager.AddParameters(2, "@ContractorID", ContractorID);
    dbManager.AddParameters(3, "@IsWithDrawn", IsWithDrawn);
    dbManager.Open();
    Result = dbManager.ExecuteNonQuery("usp_UpdateWithdrawal", CommandType.StoredProcedure).ToBool();
}
catch (Exception ex)
{
    throw ex;
}
finally
{
    dbManager.Close();
    dbManager.Dispose();
}

return Result;

}

【问题讨论】:

  • 您在TRY..CATCH 中引发错误,而不是在CATCH 中处理它,您还需要在CATCH 部分中抛出错误
  • 非常感谢。在答案框中写下您的信息,以便我标记它

标签: c# sql sql-server tsql ado.net


【解决方案1】:

正如在 cmets 中发布的那样。

您在 TRY..CATCH 中引发错误,而不是在 CATCH 中处理它,您还需要在 CATCH 部分中引发错误。

【讨论】:

    【解决方案2】:

    删除 return 放在 Raiserror 语句后的语句。
    因为如果你使用tryCatch 块,Error 抛出来捕获块。
    所以在raiseError 之后删除您的存储过程中的return 语句。

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      相关资源
      最近更新 更多