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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка когда вызываю метод Update 
:(
    Опции темы
LectorSP
Дата 3.8.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Может кто подскажет в чем дело....если в DataSet есть строки помеченные как Delete при вызове метода Updete пишет вот так 

Update requires a valid DeleteCommand when passed DataRow collection with deleted rows.

при добавлении строк все нормально...?

Код

public void RemoveServersGroup(string groupName)
        {
            AddTableInDataSet("serversgroups");

            foreach (DataRow row in dataSet.Tables["serversgroups"].Rows)
            {
                if(row["groupname"].ToString() == groupName)
                {
                    row.Delete(); 
                }
            }
            sqlDataAdapter.Update(dataSet, "serversgroups");  
        }


Добавлено через 5 минут и 26 секунд
после того как добавил SqlCommandBuilder пишет вот что....

Dynamic SQL generation for the DeleteCommand is not supported against a SelectCommand that does not return any key column information.
--------------------
Трудно жить на свете негритенку Пете, Бьет его по роже  пионер Сережа! Никакими расовыми этническими и религиозными предрассудками я не страдаю!Я за DOT.NET......................ну и за мир во всем мире тоже!
PM MAIL ICQ   Вверх
Voyager
Дата 3.8.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Возможно нужно создавать sqlDataAdapter с автогенерацией команд ("select...", true). А строки из таблицы я обычно удаляю через Remove().
PM   Вверх
mr.DUDA
Дата 5.8.2007, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(LectorSP @  3.8.2007,  14:55 Найти цитируемый пост)
Dynamic SQL generation for the DeleteCommand is not supported against a SelectCommand that does not return any key column information.

Либо в датасете нет Primary Key, либо команда Select не возвращает колонки с primary key.


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


Шустрый
*


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

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



и что делать...таблица, которая загоняеться в ДатаСет не с какой другой не связана...и что значит "команда Select не возвращает колонки с primary key"  поясните пожалуйста ?  


--------------------
Трудно жить на свете негритенку Пете, Бьет его по роже  пионер Сережа! Никакими расовыми этническими и религиозными предрассудками я не страдаю!Я за DOT.NET......................ну и за мир во всем мире тоже!
PM MAIL ICQ   Вверх
mihryak
Дата 6.8.2007, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mr.DUDA @  5.8.2007,  11:45 Найти цитируемый пост)
Либо в датасете нет Primary Key

это значит, что ни одна колонка не помечена в датасете как первичный ключ
Цитата(LectorSP @  6.8.2007,  00:53 Найти цитируемый пост)
команда Select не возвращает колонки с primary key

а это - что команда SELECT, сгенерированная автоматически или заданная руками, не содержит в списке возвращаемых колонок колонку с первичным ключом

приведи структуру таблицы в базе, структуру таблицы в датасете  и запросы SELECT и DELETE, которые сконфигурил SqlCommandBuilder
PM MAIL ICQ   Вверх
LectorSP
Дата 6.8.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Таблица очень простая ни с какими другими таблицами она не связана...две колонки...колонки с первичным ключем нету....запрос самый обычный.....SELECT * FROM tableName.....таблица в датасете, я как понимаю...точно такая же...а запрос DELETE, почему то пустой, в отличие от SELECT....периодически в дадасет добовляються еще пару таблиц...через SELECT * From tableName....вроде ничего сложного....только всё добавляеться, изменяется, но не удаляется...: ))
--------------------
Трудно жить на свете негритенку Пете, Бьет его по роже  пионер Сережа! Никакими расовыми этническими и религиозными предрассудками я не страдаю!Я за DOT.NET......................ну и за мир во всем мире тоже!
PM MAIL ICQ   Вверх
mihryak
Дата 6.8.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



задай тогда команду DELETE руками -
DELETE FROM tableName WHERE myField = 100
(точный синтаксис зависит от базы и типа колонки)
PM MAIL ICQ   Вверх
LectorSP
Дата 6.8.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Точно, когда явно указал, что нужно делать, то все заработало...но почему так...и всегда ли надо прописывать DeleteCommand?
--------------------
Трудно жить на свете негритенку Пете, Бьет его по роже  пионер Сережа! Никакими расовыми этническими и религиозными предрассудками я не страдаю!Я за DOT.NET......................ну и за мир во всем мире тоже!
PM MAIL ICQ   Вверх
mihryak
Дата 6.8.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



надо всегда, но иногда не обязательно smile
всё дело в том, что SqlCommandBuilder генерирует команды как умеет, почти ничего не зная о структуре БД и о требованиях программиста, в большинстве случаев у него это получается неважно, а иногда, как в данном случае, - вообще не выходит. MS вроде как даже не рекомендует его использование в реальных приложениях.
Если нужен полный контроль над выполняемыми запросами - лучше все sql-команды прописать руками.
PM MAIL ICQ   Вверх
LectorSP
Дата 7.8.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я всё понял...но у меня ещё один вопрос...строки он у меня удаляет без проблем..но почему то  постоянно выдаёт вот это

Concurrency violation: the DeleteCommand affected 0 of the expected 1 records. 

что это может быть такое...?
--------------------
Трудно жить на свете негритенку Пете, Бьет его по роже  пионер Сережа! Никакими расовыми этническими и религиозными предрассудками я не страдаю!Я за DOT.NET......................ну и за мир во всем мире тоже!
PM MAIL ICQ   Вверх
mihryak
Дата 7.8.2007, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Полагаю, дело в первичном ключе.
Цитата(MSDN)

DeleteCommand

Deletes rows at the data source for all rows in the table with a RowState of Deleted. Deletes all rows where the column values match the primary key column values of the row, and where the remaining columns at the data source match the original values of the row.

По этой же причине (отсутствие этого ключа) SqlCommandBuilder не может нормально сгенерировать DELETE-команду.
Если использование primary key неприемлимо и проблема не решится иным способом - придётся выдумывать какой-нибудь workaround smile Например - получать изменившиеся строки методом GetChanges() каждую удалённую удалять, добавленную добавлять, изменённую изменять smile Вполне можно написать собственный аналог DataAdapter, много времени не потребуется.
PM MAIL ICQ   Вверх
LectorSP
Дата 10.8.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



очень интересно, надо будет подумать над этим....
но пока что всё работает через try{}catch(){}  smile 
--------------------
Трудно жить на свете негритенку Пете, Бьет его по роже  пионер Сережа! Никакими расовыми этническими и религиозными предрассудками я не страдаю!Я за DOT.NET......................ну и за мир во всем мире тоже!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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