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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление записей в рекурсии, Проблема удаление записей в рекурсии 
V
    Опции темы
ProgerIv
Дата 19.8.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сделал такую рекурсию:

Код

        public void Delete(int Id)
        {
            foreach (DataRow dataRow in dataTable.Rows)
            {
                if (dataRow["ID_Parent_"] != DBNull.Value)
                {
                    if (Convert.ToInt16(dataRow["ID_Parent_"]) == Id)
                    {
                        Delete(Convert.ToInt16(dataRow["ID_"]));
                    }
                }
            }
            dataTable.Rows.Find(Id).Delete();
        }


Компилятор ругается "Deleted row information cannot be accessed through the row."
Если так:
Код

        public void Delete(int Id)
        {
            foreach (DataRow dataRow in dataTable.Rows)
            {
                if (dataRow["ID_Parent_"] != DBNull.Value)
                {
                    if (Convert.ToInt16(dataRow["ID_Parent_"]) == Id)
                    {
                        Delete(Convert.ToInt16(dataRow["ID_"]));
                    }
                }
            }
           // dataTable.Rows.Find(Id).Delete();
        }

то все проходит, но удаления не происходит, в чем дело?
PM MAIL   Вверх
jonie
Дата 21.8.2008, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



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

"Компилятор ругается"  ?? компилятор?! быть не может такого....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Partizan
Дата 21.8.2008, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



jonie, в принципе было б неплохо если б он это хотябы в качестве warning на этапе компиляции выводил  smile 


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
jonie
Дата 21.8.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



было бы не плохо, если бы код выглядет так:
Код

СделатьКруто();



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Partizan
Дата 21.8.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



jonie, было бы не плохо если бы компилятор умел читать мысли


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ProgerIv
Дата 21.8.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я так понял, что вам не понятно что откуда берется, попробую подробнее.

Пример:
ID_ | ID_Parent_ | Name
1    | (null)         | Node1
2    | (null)         | Node2
3    | 1               | Node3
4    | 2               | Node4
5    | 2               | Node5
6    | 2               | Node6
7    | 2               | Node7
8    | 5               | Node8

|__Node1
|    |
|    |__Node3
|
|__Node2
      |
      |__Node4
      |
      |__Node5
      |    |
      |    |__Node8
      |
      |__Node6
      |
      |__Node7

Мне допустим надо удалить Node2, но в эту ветку входят: Node4, Node5, Node6, Node7, а Node8 - предок для Node5, и их все, следовательно, тоже надо удалить.

Вот исходник http://depositfiles.com/files/7377124

Это сообщение отредактировал(а) ProgerIv - 21.8.2008, 13:22
PM MAIL   Вверх
ProgerIv
Дата 22.8.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем большое спасибо, проблема решена
Код

            foreach (DataRow dataRow in dataTable.Rows)
            {
                if ((dataRow.RowState != DataRowState.Deleted) &&
                    (dataRow["ID_Parent_"] != DBNull.Value)&&
                    (Convert.ToInt16(dataRow["ID_Parent_"]) == Id))
                {
                    Delete(Convert.ToInt16(dataRow["ID_"]));
                }
            }
            dataTable.Rows.Find(Id).Delete();

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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