Параметры вывода в хранимых процедурах используются для возврата некоторого значения или значений. Хранимая процедура может иметь любое количество выходных параметров.
Простая логика такова: если вы хотите вернуть 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 #.