Как вернуть результат хранимой процедуры Sql Server в .Net - PullRequest
0 голосов
/ 15 июня 2009

Каков наилучший способ вернуть результат выполнения хранимой процедуры SQL Server обратно в код .NET?

Если я хочу вернуть успех или неудачу группы удалений в транзакции, должен ли я «выбрать» что-то, или, может быть, что-то вроде RETURN (1) или RETURN (0), или я сообщу количество затронутых строк

Тогда будет ли это возвращаемым значением для ExecuteNonQuery ()?

Ответы [ 3 ]

2 голосов
/ 15 июня 2009

ExecuteNonQuery всегда возвращает количество строк, затронутых для LAST-вставки, обновления или удаления, выполненных в вашей транзакции. Вам не нужно возвращаться (1) или возвращаться (0).

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

И чтобы ответить на ваш вопрос, если желаемый результат - это количество затронутых записей последнего выполненного оператора, тогда лучше всего использовать ExecuteNonQuery. Если вам нужен какой-то другой более конкретный результат, тогда лучше всего использовать SqlCommand с возвращаемым SqlParameter и возвращать конкретное значение в возвращаемом параметре.

1 голос
/ 15 июня 2009

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

Чтобы обеспечить более подробный вывод в определенных сценариях, вы также можете использовать выходные параметры

1 голос
/ 15 июня 2009

Да, если вы используете ExecuteNonQuery (), он вернет количество затронутых строк. Если вы хотите указать значение для возврата в вашей хранимой процедуре, вы можете использовать ExecuteScalary ().

Вы также можете использовать выходной параметр для возврата значений. В процедуре SQL объявите параметр как выходной параметр (например, @ret int output). В коде .NET установите направление параметра для вывода. После строки выполнения вы можете проверить это значение, прочитав свойство ".Value"

...