Возможна ли передача массива в параметр SQL? Если я хочу массово удалить, или проставить статусы списку заказов, как это сделать?
List<int> vals = new List();
vals.Add(1);
vals.Add(2);
using (SqlConnection conn = new SqlConnection(myconn_str))
using (SqlCommand cmd = new SqlCommand(conn,
"delete from order1 where id in (@ids)" ){
cmd.Parametrs.AddWithValue("ids",vals);
cmd.ExecuteNonQuery();
}
Видел что библиотека кристала как-то это умеет делать, кто-нибудь передавал массив параметрически?
Почему бы не использовать простейший вариант:
var vals = new List<int> { 1, 2, 3 };
var ids = string.Join(",", vals);
var sql = $"delete from order1 where id in ({ids})";
Да, есть потенциальная опасность в виде sql-инъекций. Но если мы уверены во входных данных (а в данном случае это целые числа), то угрозы нет.
Например, Entity Framework генерирует аналогичный код (заменяя в строковых литералах ' на '').
Проблема может быть только в том случае, когда массив очень велик.
Продвижение своими сайтами как стратегия роста и независимости