2008-09-17 2 views
5

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

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

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

+0

Действительно, у меня такая же проблема, смешно, что возвращаемые значения не поддерживаются, без взлома – nicodemus13 2008-12-19 15:04:10

ответ

0

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

1

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

+0

Свойство SelectCommand является (AFAIK) частным для TableAdapter. Поэтому мне пришлось бы расширять каждый TableAdapter частичным классом, который, на мой взгляд, не является изящным решением, которое я надеюсь найти. – 2008-09-17 11:18:09

0

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

SET ROWCOUNT OFF 

BEGIN 
<Procedure Content> 
END 

SET ROWCOUNT ON 
+0

Спасибо за предложение, но, к сожалению, установка ROWCOUNT, похоже, не решит мою проблему. – 2008-10-02 09:44:48

1

Примечание: путь использует SqlParameter где направление = 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 как возвращение операторов выбора в хранимой процедуре ,

Последний DataTable в DataSet будет иметь 1 строку и 1 столбец, который будет содержать возвращаемое значение хранимой процедуры.

1

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

Смежные вопросы