Vikas Hire Ответов: 2

Как получить возвращаемое значение из хранимой процедуры SQL?


Привет,
Я хочу получить возвращаемое значение из хранимой процедуры,
Я не могу его получить,

Ниже приведен мой код Sql и C#.

Хранимая Процедура Ms Sql

ALTER PROCEDURE mat.CheckRequestStatus

	@RequestFrom VARCHAR(64),
	@RequestTo VARCHAR(64),
	@RequestType INTEGER,
	
AS
BEGIN
		DECLARE @RequestStatus INTEGER				
		SET  @RequestStatus=(SELECT ISNULL((SELECT DISTINCT RequestStatus FROM tblRequest WHERE RequestFrom=@RequestFrom AND @RequestTo=@RequestTo), 0))
		
		IF( @RequestStatus=0)
		BEGIN
		SET  @RequestStatus=0
		RETURN @RequestStatus
		END
		
		RETURN @RequestStatus					
END



Код C#

public int CheckRequestStatus(string RequestFrom, string RequestTo,int RequestType)
        {
            /* function CheckInterestReuest Returns a value
             * '0' for Request Not Exist
             * '1' for Pending Request
             * '2' for Accepet
             * '3' for Reject
             */

            int RequestStatus = 0;

            try
            {
                if (sqlcon.State == ConnectionState.Closed)
                {
                    sqlcon.Open();
                }

                SqlCommand cmd = new SqlCommand("mat.CheckRequestStatus", sqlcon);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@RequestFrom", RequestFrom);
                cmd.Parameters.AddWithValue("@RequestTo", RequestTo);
                cmd.Parameters.AddWithValue("@RequestType", RequestType);

                SqlParameter RuturnValue = new SqlParameter("@RequestStatus", SqlDbType.Int);
                RuturnValue.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(RuturnValue);
                cmd.ExecuteNonQuery();
                RequestStatus = (int)cmd.Parameters["@RequestStatus"].Value;
            }
            catch
            {

            }
            finally
            {
                sqlcon.Close();
            }

            return RequestStatus;
        }


Что я уже пробовал:

Я пытаюсь получить возвращаемое значение из хранимой процедуры

2 Ответов

Рейтинг:
14

CHill60

Решение 1 показывает вам, как получить выходной параметр из хранимой процедуры. Но вы уже знаете, как это сделать, так как ранее задавали очень похожий вопрос, касающийся выходных параметров.

Чтобы получить возвращаемое значение, вам все равно нужно добавить соответствующий параметр в коллекцию для cmd но на этот раз это значение, т. е.

cmd.Parameters.Add("@retValue", System.Data.SqlDbType.Int).Direction = System.Data.ParameterDirection.ReturnValue;
Затем, после выполнения хранимой процедуры, вы получаете возвращаемое значение, как и любой другой параметр (который вы уже знаете, как это сделать)
int retval = (int)cmd.Parameters["@retValue"].Value;

В таких случаях официальная документация-замечательный ресурс , я предлагаю вам попробовать : Пространство Имен System. Data.SqlClient[^]


Vikas Hire

Я имею в виду, где я должен объявить @retVal ..?

Vikas Hire

Я обновляю свой код, как вы предлагаете, но у меня есть эта ошибка..

Процедура или функция 'userRegistration' ожидает параметр '@retValue', который не был указан.

CHill60

Вы уверены, что добавили этот параметр как правильный тип?
Вы отметили ответ как полный так что я думаю вы получили его на работу

Vikas Hire

разрабатывать.. :)