Getting a Return Value in C# asp.net from a stored procedure (syntax issue)

后端 未结 4 2019
悲哀的现实
悲哀的现实 2020-12-09 13:51

I am having issues trying to get the syntax correct for my C# 2008 asp.net code. I need to get a return value (Select @@Identity) from my stored procedure

My C# code

相关标签:
4条回答
  • 2020-12-09 13:52

    The direction is set on a SqlParameter object, for your example it should be something like:

    cmdHeader.Parameters["@Postal_Code"].Direction = ParameterDirection.ReturnValue;
    
    0 讨论(0)
  • 2020-12-09 13:55

    To capture a RETURN VALUE (returned by SQL using the RETURN({number}) syntax) use:

    cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
    

    Also, you should probably be using SCOPE_IDENTITY() instead of @@IDENTITY

    Edit:
    So your sproc would do something like:

    DECLARE @NewId INTEGER
    INSERT SomeTable(FieldA) VALUES ('Something')
    SELECT @NewId = SCOPE_IDENTITY()
    RETURN (@NewId)
    

    And your C# code to retrieve that value would be:

    int newId = cmdHeader.Parameters[@ReturnValue].value;
    

    Edit 2:
    Ok, the original question confused the issue as the "return value" is a different thing to what you're actually doing which is returning a single column resultset.

    So, instead DON'T add a ReturnValue parameter at all. Just use ExecuteScalar() using your original SqlCommand setup as below:

    int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());
    
    0 讨论(0)
  • 2020-12-09 14:10

    SQL Stored Procedure:

    Assume procedure returns some id/ identity as shown below

    SET @ReturnValue= Scope_identity() return @ReturnValue

    in C# we can

    SqlParameter[] param = null; param = new SqlParameter[] { new SqlParameter("@idStudent",idStudent), new SqlParameter("","") // some empty parameters for return value }

    //here we can update param with return type SqlParameter parOut = new SqlParameter("@ReturnValue", 0); parOut.Direction = ParameterDirection.Output; param[param.Length - 1] = parOut;

    DataSet dsResult = con.executeSelectStoredProc("SP_NAME", param);

    0 讨论(0)
  • 2020-12-09 14:11
    SqlParameter parameterReturnValue = new SqlParameter("ReturnValue", SqlDbType.Int, 4);
    parameterReturnValue.Direction = ParameterDirection.ReturnValue;
    cmdHeader.Parameters.Add(parameterReturnValue);
    
    //Execute your command
    cmdHeader.ExecuteNonQuery();
    
    //Get the return value
    int returnvalue = (int)myCommand.Parameters["ReturnValue"].Value;
    
    0 讨论(0)
提交回复
热议问题