Я также искал возвращаемое значение из хранимой процедуры и захватывал его в C #.
Я возвращал различные коды возврата, основанные на логике в моем коде, и executetescalar не поможет, так как я хотел вернуться из сохраненного процесса между тем, где это требуется, с соответствующим кодом и не использовать select.
Таким образом, добавив дополнительный параметр с Direction в качестве ReturnValue, вы можете получить возвращаемое значение. Нет необходимости в параметрах OUT для получения возвращаемого значения из сохраненного процесса.
preturn.ParameterName = "@Return_Value";
preturn.DbType = DbType.Int;
preturn.Direction = ParameterDirection.ReturnValue;
Итак, вот что я придумала. Редактирование исходного кода в этом посте для простоты.
public String UserProfile(string userId)
{
String result;
System.Data.Common.DbCommand cmd = this.mConn.CreateCommand();
try
{
cmd.CommandTimeout = this.mCmdTimeout;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "UserProfile";
DbParameter p = cmd.CreateParameter();
p.ParameterName = "@UserId";
p.DbType = DbType.String;
p.Value = userId;
cmd.Parameters.Add(p);
DbParameter preturn = cmd.CreateParameter();
preturn.ParameterName = "@Return_Value";
preturn.DbType = DbType.Int;
preturn.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(preturn);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
//Need to assign the value of the stored procedure's return to result
result = Convert.ToString(cmd.Parameters["@Return_Value"].Value);
}
catch (Exception ex)
{
throw;
}
finally
{
cmd.Connection.Close();
}
return result;
}