Выходные параметры запросов

Последнее обновление: 11.02.2021

Параметры, которые используются в командах, могут быть нескольких типов. Тип параметра задается с помощью свойства Direction объекта SqlParameter. Данное свойство принимает одно из значений перечисления ParameterDirection:

  • Input: параметр является входным, то есть предназначен для передачи значений в sql-выражение запроса. Это значение по умолчанию для всех параметров

  • InputOutput: параметр может быть как входным, так и выходным.

  • Output: параметр является выходным, то есть используется для возвращения запросом каких-либо значений

  • ReturnValue: параметр представляет результат выполнения выражения или хранимой процедуры

Используем выходные параметры для возвращения id строки, которая была добавлена:

using System;
using System.Data;
using System.Threading.Tasks;
using Microsoft.Data.SqlClient;

namespace HelloApp
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string connectionString = "Server=(localdb)\\mssqllocaldb;Database=adonetdb;Trusted_Connection=True;";

            int age = 23;
            string name = "Kenny";
            string sqlExpression = "INSERT INTO Users (Name, Age) VALUES (@name, @age);SET @id=SCOPE_IDENTITY()";

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                await connection.OpenAsync();

                SqlCommand command = new SqlCommand(sqlExpression, connection);

                // создаем параметр для имени
                SqlParameter nameParam = new SqlParameter("@name", name);
                // добавляем параметр к команде
                command.Parameters.Add(nameParam);
                // создаем параметр для возраста
                SqlParameter ageParam = new SqlParameter("@age", age);
                // добавляем параметр к команде
                command.Parameters.Add(ageParam);
                // параметр для id
                SqlParameter idParam = new SqlParameter
                {
                    ParameterName = "@id",
                    SqlDbType = SqlDbType.Int,
                    Direction = ParameterDirection.Output // параметр выходной
                };
                command.Parameters.Add(idParam);

                await command.ExecuteNonQueryAsync();

                // получим значения выходного параметра
                Console.WriteLine($"Id нового объекта: {idParam.Value}");
            }
            Console.Read();
        }
    }
}

Здесь к sql-выражению добавляется операция присвоения параметру id идентификатора добавленной строки: SET @id=SCOPE_IDENTITY(). Выражение SCOPE_IDENTITY() представляет встроенную функцию MS SQL Server, которая возвращает идентификатор добавленной строки.

string sqlExpression = "INSERT INTO Users (Name, Age) VALUES (@name, @age);SET @id=SCOPE_IDENTITY()";

Для определения параметра используются его свойства. ParameterName задает имя параметра, SqlDbType указывает на тип параметра, а свойство Direction определяет тип параметра.

SqlParameter idParam = new SqlParameter
{
	ParameterName = "@id",
	SqlDbType = SqlDbType.Int,
	Direction = ParameterDirection.Output // параметр выходной
};

После выполнения команды параметр получает значение, которое мы можем получить через его свойство Value:

Console.WriteLine($"Id нового объекта: {idParam.Value}");
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850