Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Базы данных под .NET > Ошибка когда вызываю метод Update |
Автор: LectorSP 3.8.2007, 14:55 | ||
Может кто подскажет в чем дело....если в DataSet есть строки помеченные как Delete при вызове метода Updete пишет вот так Update requires a valid DeleteCommand when passed DataRow collection with deleted rows. при добавлении строк все нормально...?
Добавлено через 5 минут и 26 секунд после того как добавил SqlCommandBuilder пишет вот что.... Dynamic SQL generation for the DeleteCommand is not supported against a SelectCommand that does not return any key column information. |
Автор: Voyager 3.8.2007, 17:45 |
Возможно нужно создавать sqlDataAdapter с автогенерацией команд ("select...", true). А строки из таблицы я обычно удаляю через Remove(). |
Автор: LectorSP 5.8.2007, 23:53 |
и что делать...таблица, которая загоняеться в ДатаСет не с какой другой не связана...и что значит "команда Select не возвращает колонки с primary key" поясните пожалуйста ? |
Автор: mihryak 6.8.2007, 00:33 |
это значит, что ни одна колонка не помечена в датасете как первичный ключ а это - что команда SELECT, сгенерированная автоматически или заданная руками, не содержит в списке возвращаемых колонок колонку с первичным ключом приведи структуру таблицы в базе, структуру таблицы в датасете и запросы SELECT и DELETE, которые сконфигурил SqlCommandBuilder |
Автор: LectorSP 6.8.2007, 09:53 |
Таблица очень простая ни с какими другими таблицами она не связана...две колонки...колонки с первичным ключем нету....запрос самый обычный.....SELECT * FROM tableName.....таблица в датасете, я как понимаю...точно такая же...а запрос DELETE, почему то пустой, в отличие от SELECT....периодически в дадасет добовляються еще пару таблиц...через SELECT * From tableName....вроде ничего сложного....только всё добавляеться, изменяется, но не удаляется...: )) |
Автор: mihryak 6.8.2007, 13:31 |
задай тогда команду DELETE руками - DELETE FROM tableName WHERE myField = 100 (точный синтаксис зависит от базы и типа колонки) |
Автор: LectorSP 6.8.2007, 16:03 |
Точно, когда явно указал, что нужно делать, то все заработало...но почему так...и всегда ли надо прописывать DeleteCommand? |
Автор: mihryak 6.8.2007, 16:53 |
надо всегда, но иногда не обязательно ![]() всё дело в том, что SqlCommandBuilder генерирует команды как умеет, почти ничего не зная о структуре БД и о требованиях программиста, в большинстве случаев у него это получается неважно, а иногда, как в данном случае, - вообще не выходит. MS вроде как даже не рекомендует его использование в реальных приложениях. Если нужен полный контроль над выполняемыми запросами - лучше все sql-команды прописать руками. |
Автор: LectorSP 7.8.2007, 09:22 |
я всё понял...но у меня ещё один вопрос...строки он у меня удаляет без проблем..но почему то постоянно выдаёт вот это Concurrency violation: the DeleteCommand affected 0 of the expected 1 records. что это может быть такое...? |
Автор: mihryak 7.8.2007, 18:45 | ||
Полагаю, дело в первичном ключе.
По этой же причине (отсутствие этого ключа) SqlCommandBuilder не может нормально сгенерировать DELETE-команду. Если использование primary key неприемлимо и проблема не решится иным способом - придётся выдумывать какой-нибудь workaround ![]() ![]() |
Автор: LectorSP 10.8.2007, 16:47 |
очень интересно, надо будет подумать над этим.... но пока что всё работает через try{}catch(){} ![]() |