Как получить возвращаемые значения хранимой процедуры из TableAdapter - PullRequest
5 голосов
/ 17 сентября 2008

Я не могу найти элегантный способ получить возвращаемое значение из хранимой процедуры при использовании TableAdapters.

Похоже, что TableAdapter не поддерживает возвращаемые значения хранимых процедур SQL при использовании нескалярного вызова хранимой процедуры. Можно ожидать, что возвращаемое значение из автоматически сгенерированной функции будет возвращаемым значением из хранимой процедуры, но это не так (на самом деле это число затронутых строк) Хотя возможно использовать параметры out и передавать переменную в качестве ссылки автоматически сгенерированным функциям, это не очень чистое решение.

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

Ответы [ 6 ]

1 голос
/ 10 июня 2011

На самом деле все, что вам нужно сделать, это вернуть ваше окончательное значение из хранимой процедуры с помощью оператора SELECT, а не оператора RETURN. Результатом SELECT будет возвращаемое значение. Например, если вы просто сделаете свой оператор sp exit «SELECT 1», вы получите обратно 1. Теперь просто ВЫБЕРИТЕ фактический скаляр, который вы хотите вернуть.

1 голос
/ 02 июля 2009
1 голос
/ 01 октября 2008

ПРИМЕЧАНИЕ : путь заключается в использовании 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 столбец, который будет содержать возвращаемое значение хранимой процедуры.

1 голос
/ 17 сентября 2008

Способ получения возвращаемого значения заключается в использовании SqlParameter для объекта SqlCommand, для которого для Direction установлено значение ParameterDirection.ReturnValue. Вы должны проверить свойство SelectCommand TableAdapter после вызова Fill.

0 голосов
/ 26 июня 2009

Закрытие этого вопроса, поскольку кажется, что возвращаемые значения не поддерживаются, и элегантного обходного пути нет!

0 голосов
/ 01 октября 2008

Я не могу сказать наверняка, потому что я не использую TableAdapters, но вам может понадобиться посмотреть на вашу хранимую процедуру и включить следующее вокруг вашей процедуры.

SET ROWCOUNT OFF

BEGIN
<Procedure Content>
END

SET ROWCOUNT ON
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...