Система. Данные. Параметризированные запросы SQLite с несколькими значениями?

Я пытаюсь сделать выполненный объемное удаление с помощью параметризированных запросов. В настоящее время у меня есть следующий код:

pendingDeletions = new SQLiteCommand(@"DELETE FROM [centres] WHERE [name] = $name", conn);

foreach (string name in selected)
    pendingDeletions.Parameters.AddWithValue("$name", name);

pendingDeletions.ExecuteNonQuery();

Однако значение параметра, кажется, перезаписывается каждый раз, когда и я заканчиваю тем просто, что удалил последний центр. Что корректный путь состоит в том, чтобы выполнить параметризированный запрос со списком значений?

13
задан Rezzie 18 April 2010 в 16:43
поделиться

2 ответа

foreach (string name in selected) 
{
    pendingDeletions.Parameters.AddWithValue("$name", name);  <--
    pendingDeletions.ExecuteNonQuery(); 
}
13
ответ дан 1 December 2019 в 22:38
поделиться

Rezzie, ваш текущий код эквивалентен:

pendingDeletions = new SQLiteCommand(@"DELETE FROM [centres] WHERE [name] = $name", conn);


foreach (string name in selected)
{
    pendingDeletions.Parameters.AddWithValue("$name", centre.Name);
}

pendingDeletions.ExecuteNonQuery();

Это означает, что вы выполняете запрос только один раз, с последним значением в вашем 'selected' перечислении.

Это основная причина, по которой я ВСЕГДА ВСЕГДА ВСЕГДА использую разделители блоков в условных выражениях и циклах ВСЕГДА.

Итак, если вы заключите назначение параметров и выполнение запроса в цикл, все будет в порядке.

pendingDeletions = new SQLiteCommand(@"DELETE FROM [centres] WHERE [name] = $name", conn);


foreach (string name in selected)
{
    pendingDeletions.Parameters.AddWithValue("$name", centre.Name);
    pendingDeletions.ExecuteNonQuery();
}
7
ответ дан 1 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: