Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление всех строк 
V
    Опции темы
maxnoskov
Дата 29.6.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

Репутация: нет
Всего: нет



Есть Dataset. В нем несколько таблиц. Можно ли одним махом удалить все строки во всех таблицах 
PM MAIL   Вверх
arilou
Дата 29.6.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



1) DataSet.Clear() (удалит вместе с таблицами smile )

2) 
Код

foreach(DataTable tbl in ds.Tables)
  tbl.Rows.Clear();

ds.AcceptChanges();


чем не один мах? smile 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
maxnoskov
Дата 29.6.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

Репутация: нет
Всего: нет



Цитата(arilou @ 29.6.2006,  14:54)
1) DataSet.Clear() (удалит вместе с таблицами smile )

2) 
Код

foreach(DataTable tbl in ds.Tables)
  tbl.Rows.Clear();

ds.AcceptChanges();


чем не один мах? smile

Может я чего-то не понимаю, но все записи в базе остаются на месте после AcceptChanges и Update. Можно ли так удалять данные из базы?

Добавлено @ 15:04 
А вот такой код выдает ошибку в in

 
Код
foreach (DataRow row in mouods1.Tables["namereason"].Rows)
            { 
              mouods1.Tables["namereason"].Rows.Remove(row); 
            }
 
Говорит что коллекция была изменена. 
PM MAIL   Вверх
arilou
Дата 29.6.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Цитата(maxnoskov @  29.6.2006,  15:00 Найти цитируемый пост)
Может я чего-то не понимаю, но все записи в базе остаются на месте после AcceptChanges и Update. Можно ли так удалять данные из базы?

Дык вопрос то был про датасет! Из базы одним махом нельзя. Проще всего несколько раз выполнить SQL-запрос вида (по одному разу для каждой таблицы, если не заморачиваться с relations между таблицами:

Код

DELETE FROM TableName
 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
maxnoskov
Дата 29.6.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

Репутация: нет
Всего: нет



Цитата(arilou @ 29.6.2006,  15:07)
Цитата(maxnoskov @  29.6.2006,  15:00 Найти цитируемый пост)
Может я чего-то не понимаю, но все записи в базе остаются на месте после AcceptChanges и Update. Можно ли так удалять данные из базы?

Дык вопрос то был про датасет! Из базы одним махом нельзя. Проще всего несколько раз выполнить SQL-запрос вида (по одному разу для каждой таблицы, если не заморачиваться с relations между таблицами:

Код

DELETE FROM TableName

А если удалить все строки из таблицы например вот так: 
 
Код
            foreach (DataRow row in mouods1.Tables["namereason"].Rows)
            { 
            row.Delete(); 
            }

А потом дать 
mouods1.Tables["namereason"].AcceptChanges(); и
MOUOAdapter1.Update(mouods1, "namereason");
Не сработает? 
PM MAIL   Вверх
arilou
Дата 29.6.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Цитата(maxnoskov @  29.6.2006,  15:15 Найти цитируемый пост)
mouods1.Tables["namereason"].AcceptChanges(); и
MOUOAdapter1.Update(mouods1, "namereason");

Наоборот

Код

MOUOAdapter1.Update(mouods1, "namereason");
// а потом AcceptChanges
mouods1.Tables["namereason"].AcceptChanges();


Но это намного медленнее. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 29.6.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



AcceptChanges нужно делать после Update, иначе записи из таблиц удалятся только в датасете, но не в БД. Удалять нужно только методом DataRow.Delete(), т.к. Clear() удаляет все версии записей, и при Update() изменений в БД отправлено не будет. 


--------------------
user posted image
PM MAIL WWW   Вверх
maxnoskov
Дата 29.6.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

Репутация: нет
Всего: нет



Каюсь, но я искренне был уверен, что именно в таком порядке: AcceptChanges и Update.
Вероятно я не что -то недопонял, но размышлял так: сначала сохраняем изменения в DS с помощью  AcceptChanges и только потом передаем их в БД с помощью Update  
PM MAIL   Вверх
rulon
Дата 29.6.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



 А какое IDE исспользуется ??? .NET или 2005 для реализации задачи ??? 
PM MAIL   Вверх
mr.DUDA
Дата 29.6.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(maxnoskov @  29.6.2006,  15:42 Найти цитируемый пост)
Вероятно я не что -то недопонял, но размышлял так: сначала сохраняем изменения в DS с помощью  AcceptChanges и только потом передаем их в БД с помощью Update  

Update анализирует состояние (RowState) каждой строки. Если RowState - Unchanged, то строка адаптером игнорируется. Смысл вызова AcceptChanges - перевести все строки в состояние Unchanged (кроме тех, что в состоянии Deleted; вызов AcceptChanges их удаляет), это как бы открывает новую сессию работы с датасетом.   


--------------------
user posted image
PM MAIL WWW   Вверх
maxnoskov
Дата 29.6.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

Репутация: нет
Всего: нет



Ничего не понимаю. Делаю вот так
Код

foreach (DataRow row in mouods1.Tables["namereason"].Rows)
            { 
            row.Delete(); 
            }
MOUOAdapter1.Update(mouods1.namereason);
mouods1.Tables["namereason"].AcceptChanges();

Выдает ошибку: "Параметр ?_1 не имеет значения по умолчанию"

Update генерился визардом.
В чем загвоздка, нужно задавать параметры или это связано с первичным ключем?
  

Это сообщение отредактировал(а) maxnoskov - 29.6.2006, 19:04
PM MAIL   Вверх
arilou
Дата 29.6.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Цитата(maxnoskov @  29.6.2006,  19:01 Найти цитируемый пост)
В чем загвоздка, нужно задавать параметры или это связано с первичным ключем?

А он есть (ключ)? 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
maxnoskov
Дата 29.6.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

Репутация: нет
Всего: нет



Цитата(arilou @ 29.6.2006,  19:06)
Цитата(maxnoskov @  29.6.2006,  19:01 Найти цитируемый пост)
В чем загвоздка, нужно задавать параметры или это связано с первичным ключем?

А он есть (ключ)?

Так точно smile  
PM MAIL   Вверх
maxnoskov
Дата 30.6.2006, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

Репутация: нет
Всего: нет



Всем спасибо за помощь
Правда, Clear не подходит т.к. нужно в случае возникновения исключения при считывании инфы из xml файла откатить удаление. Поэтому выбрал такое решение
Код

 namereasonDA.Fill(mouods1);//Заполняем DataSet
            foreach (DataRow row in mouods1.namereason.Rows)//Перебираем строки первой таблицы
            {
              row.Delete();//Удаляем строки
            }
            try//Обрабатываем исключения считывания из файла
            { 
                mouods1.namereason.ReadXml("fail.xml");//Считываем информацию из xml файла
            }
            catch//Если случилось исключение, то выводим сообщение
            {
                MessageBox.Show("Файл справочников поврежден или имеет не тот формат", "Ошибка считывания", MessageBoxButtons.OK, MessageBoxIcon.Error);
                mouods1.RejectChanges();//Отменяем удаление строк из DataSet
            }
            if (mouods1.HasChanges())//Если есть изменения в DataSet
            {
                try//Обрабатываем исключение команды Update
                {
                    namereasonDA.Update(mouods1.namereason);
                    MessageBox.Show("Справочники успешно загружены", "Операция выполнена", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка ...", "Операция не выполнена", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
 
Правда, придется для каждой таблицы пускать цикл для удаления, но решение работает 

Что-то я гоню smile . Можно и все таблицы одним махом
Код
foreach (DataTable table in mouods1.Tables)
            {
                foreach (DataRow row in mouods1.table.Rows)//Перебираем строки первой таблицы
                {
                    row.Delete();//Удаляем строки
                }
            }

 

Это сообщение отредактировал(а) maxnoskov - 30.6.2006, 14:00
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.