В предыдущей статье мы рассмотрели работу с параметрами возвращающими табличное значение в MS SQL Server. Но, как использовать преимущество таких параметров в клиентском приложении?
На самом деле, ответ на это вопрос во многом зависит от платформы, на которой приложение разрабатывается. В данной статье мы рассмотрим работу передачу табличных данных в качестве параметра хранимой процедуры или функции в C#.
В ходе рассмотрения мы будем использовать табличный тип данных и функцию описанные в статье по ссылке. Поэтому настоятельно рекомендуется вначале ознакомиться с данной статьёй, чтобы лучше понимать, о чём идёт речь.
В C# табличные наборы данных можно передать MS SQL Server в виде объекта DataTable, который по своей структуре соответствует требуемому табличному типу данных. Сформируем таблицу с необходимой структурой и заполним её данными.
DataTable carList = new DataTable(); carList.Columns.Add("id"); carList.Columns.Add("ModelTitle"); carList.Rows.Add(1, "UAZ"); carList.Rows.Add(2, "Lada"); carList.Rows.Add(3, "KAMAZ");
Теперь передадим эту таблицу в качестве параметра функции. Так как мы передаём данные табличного типа определённого пользователем требуется обязательно указать имя типа данных в свойстве TypeName.
SqlCommand command = new SqlCommand("SELECT dbo.CarListCount(@cars) AS t", connection); command.Parameters.AddWithValue("@cars", carList); command.Parameters["@cars"].TypeName = "dbo.CarList";
После этого можно выполнить функцию и получить её значение. Ниже приведён примерный полный код для данной операции.
using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = new SqlCommand("SELECT dbo.CarListCount(@cars) AS t", connection); command.Parameters.AddWithValue("@cars", carList); command.Parameters["@cars"].TypeName = "dbo.CarList"; using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { int a = (int)reader.GetValue(0); } }; };
В случае хранимых процедур работа с параметрами возвращающими табличное значение строится аналогичным образом.