Данное руководство устарело. Актуальное руководство: по ADO.NET и работе с базами данных в .NET 6
Параметры, которые используются в командах, могут быть нескольких типов. Тип параметра задается с помощью свойства Direction
объкта SqlParameter. Данное свойство принимает одно из значений перечисления ParameterDirection:
Input
: параметр является входным, то есть предназначен для передачи значений в sql-выражение запроса. Это значение
по умолчанию для всех параметров
InputOutput
: параметр может быть как входным, так и выходным.
Output
: параметр является выходным, то есть используется для возвращения запросом каких-либо значений
ReturnValue
: параметр представляет результат выполнения выражения или хранимой процедуры
Используем выходные параметры для возвращения id строки, которая была добавлена:
string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=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)) { connection.Open(); 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); command.ExecuteNonQuery(); // получим значения выходного параметра Console.WriteLine("Id нового объекта: {0}", idParam.Value); }
Здесь к sql-выражению добавляется операция присвоения параметру id идентификатора добавленной строки: SET @id=SCOPE_IDENTITY()
.
Для определения параметра используются его свойства. ParameterName
задает имя параметра, SqlDbType
указывает на тип параметра,
а свойство Direction
определяет тип параметра.
После выполнения команды параметр получает значение, которое мы можем получить через его свойство Value
:
Console.WriteLine("Id нового объекта: {0}", idParam.Value);