Как выполнить SubSonic3 StoredProcedure с возвращаемым значением - PullRequest
1 голос
/ 19 августа 2009

Как мне выполнить SP и получить возвращаемое значение. Код ниже всегда возвращает нулевой объект. Хранимая процедура была протестирована в базе данных с использованием тех же параметров, что и в коде, но SubSonic sp всегда возвращает ноль. При выполнении в БД через sql возвращает правильные значения.

Используется SubSonic 3.0.0.3.

myDB db = new myDB();
StoredProcedure sp = db.GetReturnValue(myParameterValue);
sp.Execute();
int? myReturnValue = (int?)sp.Output;

В приведенном выше коде sp.Output всегда имеет значение null. При выполнении в базе данных возвращаемая переменная является допустимым целым числом (0 или выше) и никогда не является нулевой.

Код хранимой процедуры ниже:

CREATE PROCEDURE  [dbo].[GetReturnValue]    
     @myVariable varchar(50)
AS
    declare @myReturn int
BEGIN
    set @myReturn = 5;
    return @myReturn;   
END

При выполнении хранимой процедуры в SQL Server возвращается значение «5».

Ответы [ 3 ]

3 голосов
/ 20 августа 2009

Я скопировал ваш sproc и прошел через код SubSonic, и. Output никогда не устанавливается нигде. Обходной путь - использовать выходной параметр и ссылаться на него после выполнения: sproc.OutputValues ​​[0];

1 голос
/ 12 ноября 2011

Вот простой способ сделать это:

В хранимой процедуре вместо RETURN используйте SELECT следующим образом:

SELECT @@ROWCOUNT 

или

SELECT @TheIntegerIWantToReturn

Тогда в коде используйте:

StoredProcName.ExecuteScalar()

Это вернет единственное целое число, которое вы выбрали в хранимой процедуре.

0 голосов
/ 01 октября 2009
CREATE PROCEDURE  [dbo].[GetReturnValue]    
     @myVariable varchar(50)
     @myReturn BIGINT OUTPUT
AS
    declare @myReturn int
BEGIN
    set @myReturn = 5;
    return @myReturn;   
END
...