Передача массива в параметр SQL

95
06 мая 2021, 18:10

Возможна ли передача массива в параметр 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();    
   }

Видел что библиотека кристала как-то это умеет делать, кто-нибудь передавал массив параметрически?

Answer 1

Почему бы не использовать простейший вариант:

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 генерирует аналогичный код (заменяя в строковых литералах ' на '').

Проблема может быть только в том случае, когда массив очень велик.

READ ALSO
C# Шаблоны и Списки

C# Шаблоны и Списки

Есть класс Colum<T>, Есть класс Row со списком List<Colum>И есть проблема, List<Colum> требует указать ещё тип T аки List<Colum<int>>, но мне не нужно...

83
Доступ с Composer, идущим в комплекте с Open Server из Php Storm

Доступ с Composer, идущим в комплекте с Open Server из Php Storm

Я знаю, что Open Server имеет в комплектации консоль, откуда есть доступ к ComposerТем не менее, я бы хотел обойтись без этой консоли и работать с Composer...

89
Поиск всех значений в тексте

Поиск всех значений в тексте

есть текст [a]какой то текст[/a] еще куча какого то текста, [a]какой то текст[/a] есть регулярка /(\[a+\/a\])/ если текст без переноса строки, то находит...

112
JSON.parse Unexpected token T in JSON at position 12

JSON.parse Unexpected token T in JSON at position 12

Есть у нас сформированный на php масив данных:

101