ПРИМЕЧАНИЕ : путь заключается в использовании SqlParameter, где Direction = ParameterDirection.ReturnValue
С учетом сказанного, как кто-то уже упомянул SqlParameters, вот альтернативный динамический метод с использованием DataSet. (если ты так ездишь):
Пример SQL-оператора и C # как пара:
string sql = @"DECLARE @ret int
EXEC @ret = SP_DoStuff 'parm1', 'parm2'
SELECT @ret as ret";
DataSet ds = GetDatasetFromSQL(sql); //your sql to dataset code here...
int resultCode = -1;
int.TryParse(ds.Tables[ds.Tables.Count-1].Rows[0][0].ToString(), out resultCode);
Результаты хранимой процедуры загружаются в DataSet и будут иметь столько же DataTables, сколько возвращаемых операторов выбора в хранимой процедуре.
Последняя таблица данных в наборе данных будет иметь 1 строку и 1 столбец, который будет содержать возвращаемое значение хранимой процедуры.