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
The direction is set on a SqlParameter
object, for your example it should be something like:
cmdHeader.Parameters["@Postal_Code"].Direction = ParameterDirection.ReturnValue;
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());
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);
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;