2015-10-23 2 views
0

Как удалить отдельный объект в базе данных? Когда я нажимаю кнопку удаления, мой код удаляет все элементы, которые аналогичны выбранному элементу в списке. Например, если я хочу удалить CocaCola из своего списка, я хочу, чтобы он удалял этот единственный элемент CocaCola в базе данных не все элементы CocaCola.Как удалить отдельный элемент в базе данных из списка?

мой код:

conn.Open(); 
SqlCommand cmd = new SqlCommand("delete from Products Where Product ='"+lstProducts.SelectedItem+"'", conn); 
cmd.ExecuteNonQuery(); 
conn.Close(); 
+2

Вы просто хотите удалить произвольную запись, где продукт CocaCola? –

+1

Если у меня есть 10 предметов из кокаколы в списке базы данных, и я нажимаю кнопку «Удалить», я хочу, чтобы он удалял только один элемент из кокаколы, а не все из них. – abc

+1

[SQL Injection alert] (http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - вы должны ** не ** объединять свои SQL-запросы - использовать ** параметризованные запросы ** вместо избежания SQL-инъекции –

ответ

1

Если это не имеет значения, какие строки остаются вы можете использовать TOP(1):

DELETE TOP (1) 
FROM Products 
Where Product = @Product 

Обратите внимание, что вы должны использовать SQL параметры вместо строки concatanation, чтобы предотвратить SQL инъекции и другие менее серьезные проблемы.

MSDN:

Когда ТОП используется с DELETE, ссылочные строки не расположены в любой заказ и заказ по п не может быть непосредственно указанных в это утверждение. Если вам нужно использовать TOP для удаления строк в значимом хронологическом порядке , вы должны использовать TOP вместе с предложением ORDER BY в инструкции подзапроса. См. Раздел «Примеры», который приведен в этой теме. TOP не может использоваться в операторе DELETE против секционированных просмотров.

Acc. к TOP(1):

Для обеспечения обратной совместимости, скобки не являются обязательными в SELECT, заявления. Мы рекомендуем всегда использовать круглые скобки для TOP в Операторы SELECT для согласованности с его обязательным использованием в INSERT, Операторы UPDATE, MERGE и DELETE, в которых требуются скобки .

1

Вы можете попробовать использовать TOP так:

SqlCommand cmd = new SqlCommand("delete top (1) from Products Where Product ='"+lstProducts.SelectedItem+"'", conn); 
cmd.ExecuteNonQuery(); 

Кроме того, ваш код склонен к SQL Injection. Вы можете использовать параметризованный запрос, чтобы избавиться от него.

+0

Вы должны использовать 'TOP (1)' –

+0

@TimSchmelter: - Спасибо, что указали это. Починил это! –

1

Для этого необходимо иметь столбец Product с внешним ключом Unique, иначе вам нужно передать идентификатор или другой уникальный столбец.

+2

Обратите внимание, что sql удаляет все строки для соответствия критериям, используя верхний, удаляет первый, а не желаемый. – Nicolae

Смежные вопросы