У меня есть, например, эта хранимая процедура
ALTER PROCEDURE dbo.PersonaDoc
@cDocumento varchar (20)
AS
SELECT Ruta_Line
FROM Persona
WHERE (documento= @cDocumento)
Какая разница использовать его в C# с помощью ExecuteNonQuery, ExecuteScalar или ExecuteReader (в зависимости от случая, значения, которые вы хотите вернуть), если хранимая процедура
ALTER PROCEDURE dbo.PersonaDoc
@cDocumento varchar (20)
@resultado int OUTPUT
AS
SELECT SET@resultado = nombre
FROM Persona
WHERE (documento= @cDocumento)
Что мне непонятно, так это разница между потреблением данных, которые хранимая процедура приносит напрямую, или использованием для нее выходного значения, я полагаю, что в первом случае преимущество будет в том, что я могу вывести несколько значений и с ВЫВОДОМ только один, но если я просто хочу возвращаемое значение, это то же самое?
Отличия:
ExecuteNonQuery
выполнит хранимую процедуру и не вернет никаких результатовExecuteScalar
вернет единые данные, с которыми вы можете использовать сторону вашего приложенияExecuteReader
используется, когда вы хотите получить набор данных, то есть несколько строк и несколько столбцов.Теперь, взяв за основу хранимую процедуру
При выполнении:
ExecuteNonQuery
вы не получите результатExecuteScalar
это перевернет вас,null
так как в нем выSELECT
делаете назначение с помощью@resultado = nombre
, чтобы вернуть результат, который вы должны добавитьSELECT @resultado
в конец своей хранимой процедурыExecuteReader
так же, как он вернет васnull
, вы должны сделать то же самое, чтоExecuteScalar
или в его случае aSELECT * FROM Persona
(в качестве примера)Обновлять
С
OUTPUT
его помощью вы делаете ссылку по значению на переменную, которую вы назначили в качестве выходного значения, в случае вашей хранимой процедуры вы можете использоватьExecuteScalar
илиOUTPUT
, оба могут быть настроены в соответствии с тем, как вы программируете. Если вы используете C#, пример кода будет следующим, чтобы получить значение документа с помощьюDirection = ParameterDirection.Output;
: