![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 2 Всего: 44 |
Ситуация:
Есть объекты классов:ODBCConnection, ODBCDataAdapter, класса поражденного от DataSet, DataGrid. Все они «повязаны» в результате чего у меня в гриде отображается содержимое таблицы, ReadOnly = false После закрытия программы, данные не обновляются. Добавляю строку odbcDataAdapter1.Update(dataSet11,dataSet11.Tables[0].TableName); Получаю ошибку времени исполнения Update requires a valid InsertCommand when passed DataRow collection with new rows. Как обновить данные непосредственно в DB и по какому событию сие лучше совершать, что бы при поступлении новых данных база всегда была «свеженькой» -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| Kurt |
|
||||||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
Оохх.. Виноват, совсем забыл.
Для того, чтобы вносить изменения (добавлять/редактировать/удалять) в БД, нужно определить соотв. команды DataAdapter (т.е. соответственно InsertCommand, UpdateCommand, DeleteCommand). Я буду говорить об InsertCommand, однако, несложно будет додумать код для остальных команд. Пусть у нас есть таблица myTable с двумя столбцами intColumn и strColumn. По названиям ясно, каков тип этих столбцов. Итак, сначала создаем InsertCommand:
Т.е. мы определили.. хм.. ну скажем, шаблон команды вставки строки. Теперь мы должны определить вставляемые параметры:
Т.е. мы сопоставляем имя столбца с соотв. переменной в SQL-запросе, а также указываем тип столбца. Все. После этого мы можем добавлять новые записи (dAdapter.Update(..)). Для обновления/удаления существующих записей, нам надо лишь правильно составить запрос и определить соотв. параметры. По-хорошему, в каждой программе следует определять все команды DataAdapter'a (InsertCommand, UpdateCommand, DeleteCommand, SelectCommand) Дальше все сделает Update(). P.S. На всякий случай, вот полная программка, к-я выводит содержание вышеописанной таблицы, потом делает вставку строк и выводит обновленные данные. (данные заново качаются с базы, а перед этим DataSet очищается..). Написано немного криво, извиняйте, сейчас маловато времени..
-------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
||||||
|
|||||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 2 Всего: 44 |
Спасибо, но либо я что-то не поняла.
Я все делаю при помощи редактора ресурсов 2003 студии. Получаю следующий код
@ заменнена на : т.к. в интербейсе параметры передаются именно так (а моя база данных именно интербейсовская). В результате имею ошибку времени исполенияни . Подозреваю, что это связанно с тем, что не передаются инсерту параметры, может надо гд-то указывать кто и как их заполняет? ОЧЕНЬ ОЧЕНЬ НУЖНА ПОМОЩЬ! -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Подозреваю, что именно это и вызывает проблемы. А нельзя "@" заменить на "?" ? Либо не использовать дизайнер VS 2003? |
|||
|
||||
| Kurt |
|
|||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
arilou, я вот тоже об этом подумал...
Блин, что же может быть не так.. Nastya Вот смотри, я прикрепил архив(username=serega password=serega) с VS2003-проектом, к-й представляет собой маленькую форму с таблицей, и тремя кнопками: "Load from DB" - загрузить данные из базы "Save to DB" - сохранить данные в базу "Close it!" - закрыть это супер приложение. Используется Access-база через ODBC. (.mdb прилагается. Располагается в папке Debug, рядом с exe) В базе всего одна таблица table1 с двумя столбцами c1 (Int), c2 (varchar). c1 Объявлен как Primary Key. Сначала попробуй с Access. Открой приложение в VS, поменяй ConnectionString (измени путь к базе baza0.mdb) и запускай. Кнопкой "Load.." загрузи данные в таблицу, внеси какие-нибудь изменения (лучше с c2, т.к. с1 должен быть всегда уникален). После этого нажми "Save to DB". Поидее все твои изменения сохранятся в базу. Проверить это ты можешь: 1) открыв базу в Access; 2) заново запустив приожение; 3) снова нажав "Load from DB" - это обновит таблицу. Собственно, как делалось это великое приложение: Как только я добавил DataAdapter и определил все поля, студия создала за меня SelectCommand и InsertCommand (НО И НЕ БОЛЕЕ!). Т.е. я запускаю приложение, могу добавлять новые записи, но при попытке удаления или редактирования - вываливаюсь в исключение, т.к. эти операции не определены. Вручную добавляю два OdbcCommand с именами UpdateComm и DeleteComm. Щелчками мышки определяю им параметры и соотв. SQL-запросы. Назначаю их DataAdapter'у соотв. на UpdateCommand и DeleteCommand. Все. Хеппи энд. Все работает. Можно порассуждать, почему не определются комманды удаления и редактирования самой студией. Возможно, эти операции слишком зависят от конкретных условий разработки и структуры БД. Хочу извиниться за несколько корявый стиль приложения - я не привык такие вещи делать в студии (notepad.exe форева Вобщем, что тебе советую сделать: 1) скачать и распаковать приложение; 2) открыв в VS2003 изменить ConnectionString согласно тому, куда ты все это распакуешь. 3) запустить и поработать с Access'ом - если будет правильно указан ConnectionString, проблем не должно быть. 4) убедившись, что все работает, создать в Interbase точно такую же таблицу и, изменив опять ConnectionString, попробовать еще раз запустить. Если с Access'ом не будет получаться - спрашивай, хотя проблем не должно быть. Если не будет получаться именно с Interbase - тут я ничего не могу сказать. У меня нет ODBC-драйвера. Надо будет качать драйвер (кстати, попробуй специальный .NET-драйвер, о котором я говорил...) И, наконец, если все работает - на здоровье. P.S. Сам я почти не пользуюсь Access, но он наиболее удобен в данном случае. P.S.S. Пользуясь случаем, хочу поблагодарить за халявный ftp. Если будут проблемы с закачкой, зайдите на 195.131.88.214 имя serega пароль serega и пройдите к папке Kurt/dotNET/raznoe/ -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 2 Всего: 44 |
Курт Огромное спасибо!!
Все заработало. Я во первых перед Update не открывала коннект, а во втоых не надо было писать имена параметров в запросе а заменить их "?" -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |