2016-05-22 2 views
0

У меня есть SP, который возвращает целочисленное значение. SP не определил какую-либо возвращаемую переменную и он непосредственно возвращает значение, например. вернуться -1, -2 вернутьсяКак получить возвращаемое значение из хранимой процедуры

Я попытался следующий код, но он дает исключение:

Код

AseParameter RetVal = cmd.Parameters.Add ("@ return_value", SqlDbType .int); retval.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery(); // Эта строка бросает исключение

Исключение

NotSupportException

BindParameter - Int

Как читать возвращаемое значение?

EDIT

хранимых процедур

IF OBJECT_ID('dbo.MySP') IS NOT NULL 
BEGIN 
    DROP PROCEDURE dbo.MySP 
    IF OBJECT_ID('dbo.MySP') IS NOT NULL 
     PRINT '<<< FAILED DROPPING PROCEDURE dbo.MySP >>>' 
    ELSE 
     PRINT '<<< DROPPED PROCEDURE dbo.MySP >>>' 
END 
go 
create procedure MySP 

    @param1   char(60), 
    @param2   char(3), 
    @param3   int, 
    @param4   char(4) 
as 
declare 
    @somefield1   char(1), 
    @somefield2   datetime, 

    If @param1 is null 
     return -1 

    If @param2 != "L" 
     return -2 

more code here..... 
+0

Вы пытались установить значение? _AseParameter retval = cmd.Parameters.Add ("@ RETURN_VALUE", SqlDbType.Int) .Value = 0; _ – Steve

+0

Получение ошибки «Невозможно неявно преобразовать тип« объект »в« Sybase.Data.AseClient.AseParameter ». Явное преобразование существует (вам не хватает роли?) –

+0

Не могли бы вы показать код SP? и еще код для запуска SP? –

ответ

0

Похоже, вам нужен SqlDataReader, учитывая, что вы надеетесь получить значение обратно.

This question имеет код, уже выписанный для вас. Просто нужно адаптироваться к вашему делу. Есть также несколько хороших ссылок на некоторые довольно приличные учебные материалы.

0

Использование следующего кода устраняет проблему. Я понял, что передаю SqlDbType.Int, когда это база данных Sybase.

AseParameter retval = новый AseParameter ("@ RETURN_VALUE", AseDbType.Integer); cmd.Parameters.Add (retval); retval.Direction = ParameterDirection.ReturnValue; cmd.ExecuteNonQuery(); return (int) cmd.Parameters ["@ RETURN_VALUE"]. Значение;