2017-03-06 11 views
1

特定の条件が満たされた場合は、エラーを発生させる必要がありますが、それでも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番号:

パブリック静的ブールUpdateWithdrawal(INT NitNo、INT WorkNo、INT ContractorID、BOOL IsWithDrawn) {BOOL結果。

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; 

}

+3

'TRY..CATCH'でエラーを起こしていて、' CATCH'で処理していない場合は、 'CATCH'セクションにエラーを投げる必要があります。 – Stephen

+0

ありがとうございました。回答のボックスにあなたのメッセージを書いてください。私はそれをマークすることができます – Covert

答えて

2

コメントに投稿されました。

TRY..CATCHの範囲内でエラーを発生しており、CATCHで処理していない場合は、CATCHセクションにもエラーを投げる必要があります。

1

RAISERROR文に置かれた後return文を削除します。
tryCatchブロックを使用すると、Errorブロックをスローするためにスローされます。
raiseErrorの後にストア手順でreturn文を削除してください。

+0

はい、しかし動作していません – Covert

関連する問題