удаленный элемент в наборе данных, не удаленный в базе данных

#c# #dataset

#c# #набор данных

Вопрос:

Привет everone

У меня есть функция

  public void RemoveStock(string tickerName) {

    int key = this.getKeyFromtickerName(tickerName);
    foreach (var item in listingDataTable.Where(
        x => x.stock == key).ToList()) {
           listingDataTable.RemoveListingRow(item);
    }
    listingTa.Update(listingDataTable);
}
  

Определения:

 listingDataTable = new stockDataSet.ListingDataTable();
listingTa = new stockDataSetTableAdapters.ListingTableAdapter();
  

Тип базы данных: SQL Server Compact Edition

Функция удаляет строки из набора данных, но не из базы данных. Все дополнения к базе данных сохранены, но я не могу удалить из базы данных.

Нужно ли мне сделать что-то еще, чтобы база данных приняла мои изменения?

С наилучшими пожеланиями
Gorgen

Комментарии:

1. Это своего рода табличный адаптер, который записывается инструментом dataset при создании набора данных.

Ответ №1:

Попробуйте это вместо:

 foreach (var item in listingDataTable.Where(
    x => x.stock == key).ToList()) {
       item.Delete();
}
  

Я думаю, что это фактически отметит строку для удаления.

Комментарии:

1. с помощью этого кода я получаю «Для обновления требуется действительная команда DeleteCommand при передаче коллекции DataRow с удаленными строками».

2. Когда я добавил свою команду DeleteCommand, она довольно сильно разбилась, жалуясь на проблемы с параллелизмом. Но, по крайней мере, ваш ответ дал мне представление о том, что было не так, и это главное, я думаю. 🙂

Ответ №2:

Оказалось, что мне нужно добавить DeleteCommand в мой адаптер базы данных. Команда DeleteCommand не была сгенерирована автоматически, и при использовании .RemoveListingRow(item) сообщение об ошибке не выдавалось, оно просто не работало.

В источниках данных выберите «Редактировать набор данных с помощью конструктора» Свойства tableAdaper генерируют команду, такую как

УДАЛИТЬ ИЗ списка, ГДЕ (stock = @p1)