在C#中如何使用ExecuteNonQuery从存储过程中获取返回值

Pra*_*eep 8 c# ado.net

我有以下查询:

create proc [dbo].[DeleteParts] 
    @TransNo nvarchar (6), @fpart nvarchar(25) 
AS 
    DECLARE @Returns BIT 
    SET @Returns = 1 

    BEGIN 
       TRY  
          BEGIN TRANSACTION 

          DELETE FROM PARTABLE 
          WHERE TransNo = @TransNo and fpart = @fpart

          COMMIT 
       END TRY 
       BEGIN CATCH   
           Print 'Delete failed'    
           SET @Returns = 0      
           -- Any Error Occurred during Transaction. Rollback     
           IF @@TRANCOUNT > 0       
               ROLLBACK  -- Roll back 
       END CATCH

       RETURN @Returns
Run Code Online (Sandbox Code Playgroud)

这个编译完全没问题.

在C#中,我想执行此查询并获取返回值.

我的代码如下:

using(System.Data.SqlClient.SqlCommand deletecommand = this._connection.CreateCommand())
{
   deletecommand.CommandText = "DeleteParts";
   deletecommand.CommandType = System.Data.CommandType.StoredProcedure;
   deletecommand.Parameters.AddWithValue("@TransNo", ItemSODBOM.SONO);
   deletecommand.Parameters.AddWithValue("@fpart", ItemSODBOM.fbompart);

   string ReturnValue = deletecommand.ExecuteNonQuery().ToString();
}
Run Code Online (Sandbox Code Playgroud)

它没有给我任何错误,但它返回受影响的行数,我想返回1或0.

示例:如果删除操作成功,则返回1,如果失败则返回0.

任何有关源代码的帮助将不胜感激.

谢谢,

普拉迪普

Joe*_*Joe 17

您需要一个Direction设置为的参数ParameterDirection.ReturnValue

就像是:

SqlParameter returnParameter = deleteCommand.Parameters.Add("RetVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
...
deleteCommand.ExecuteNonQuery();
...
int returnValue = (int) returnParameter.Value;
Run Code Online (Sandbox Code Playgroud)

您存储过程当然需要返回此返回值:

create proc [dbo].[DeleteParts]      
    @TransNo nvarchar (6),   
    @fpart nvarchar(25)  
AS      
DECLARE @Returns BIT      
SET @Returns = 1     
...
RETURN @Returns
Run Code Online (Sandbox Code Playgroud)