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

Простая логика такова: если вы хотите вернуть 1 значение, используйте 1 выходной параметр, для возврата 5 значений используйте 5 выходных параметров, для 10 используйте 10 и так далее.

В этом руководстве я объясню, как вернуть 3 значения из хранимой процедуры на языке C #.

Знание того, как работают эти параметры вывода, также поможет вам извлечь результат из O / RM, таких как Entity Framework Core.

Я буду использовать базу данных NorthWind

Чтобы продемонстрировать использование выходных параметров, я буду использовать таблицу продуктов базы данных Northwind. Я создаю хранимую процедуру под названием GetProductDetails, которая будет возвращать ProductName, UnitPrice и QuantityPerUnit любого продукта, ProductId передается в хранимую процедуру.

Хранимая процедура с выходными параметрами

Хранимая процедура приведена ниже. Вы можете ясно видеть, что я создал в нем 3 выходных параметра и специально добавил ключевое слово Output после каждого из них.

Запрос Select поместит значения в эти 3 выходных параметра в соответствии с ProductId, переданным в хранимую процедуру.

Create Procedure GetProductDetails
@ProductId           INT,
@ProductName         VARCHAR(100)         OUTPUT,
@UnitPrice           MONEY                OUTPUT,
@QuantityPerUnit     VARCHAR(20)         OUTPUT
AS
SELECT @ProductName=ProductName,@UnitPrice=UnitPrice,@QuantityPerUnit=QuantityPerUnit FROM Products WHERE ProductID=@ProductId

Выполнение этой хранимой процедуры из кода C #

Теперь я покажу, как выполнить хранимую процедуру GetProductDetails и получить ProductName, ProductPrice и QuantityPerUnit из продукт, идентификатор продукта которого равен 10.

Итак, прежде всего включите в свой код C # следующие 2 пространства имен.

using System.Data.SqlClient;
using System.Configuration;

Теперь добавьте следующий код:

SqlConnection conn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["CS"].ConnectionString;
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetProductDetails";
//Passing the ProductId 10 to the SP
cmd.Parameters.AddWithValue("@ProductId", 10);
/*The 3 output parameters*/
cmd.Parameters.Add("@ProductName", SqlDbType.VarChar, 100);
cmd.Parameters["@ProductName"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@UnitPrice", SqlDbType.Money);
cmd.Parameters["@UnitPrice"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@QuantityPerUnit", SqlDbType.VarChar, 20);
cmd.Parameters["@QuantityPerUnit"].Direction = ParameterDirection.Output;
/*End*/
try
{
    conn.Open();
    //Executing the SP
    
    int i = cmd.ExecuteNonQuery();
    //Storing the output parameters value in 3 different variables.
    string productName = Convert.ToString(cmd.Parameters["@ProductName"].Value);
    decimal unitPrice = Convert.ToDecimal(cmd.Parameters["@UnitPrice"].Value);
    string quantityPerUnit = Convert.ToString(cmd.Parameters["@QuantityPerUnit"].Value);
}
catch (Exception ex)
{
}
finally
{
    conn.Close();
}

Объяснение
В коде C # я просто выполняю хранимую процедуру, передавая ей значение ProductId, равное 10. Сохраненная процедура выполняется и возвращает значения через 3 выходных параметра.

Я также опубликовал аналогичное руководство по CloudBoost, которое называется Как использовать транзакции в SQL Server.

Заключение
Это способ использования параметров вывода SQL в коде C #. Используйте этот код для создания всевозможных функций базы данных с использованием SQL Server и C #.