| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .NET > Обновление БД средствами DataAdapter |
| Автор: kaa 5.1.2006, 23:39 |
| Тут в процессе изучения C# столкнулся с одной проблемой - нигде немогу найти вразумительного описания обновления информации в базе данных средствами DataAdapter. Знаю что в ADO.NET логику обновления надо писать самому. А как писать, что писать, какие св-ва и методы приметь толком нигде (из того что я видел) не говориться. Я бы попросил знающих людей объяснить |
| Автор: -ser- 6.1.2006, 05:26 | ||||
| ну что ты все заладил со своей логикой обновления. видать не работал с простым АДО и уж тем более без него. поскольку ты ничего из 700 станиц по АДО.НЕТ не понял, что не удивительно, давай начнем с конкретики, с самых азов. что ты хочешь сделать? вообщем-то всю необходимую информацию по работе с АДО.НЕТ для себя я нашел на этом форуме. вот, например, начни отсюда http://forum.vingrad.ru/index.php?showtopic=29461&st=0&#entry213780 но здесь нехватает одной существенной детали. да, все знают что обновления осуществляются с помощью
но в таком виде это просто не работает, то есть обновления не будут записаны, и здесь есть одна хитрость, о которой не везде упоминается (по крайней мере год назад, когда я это осваивал). а именно, для этого необходимо создать новый датасет, который и содержит только наши изменения. вот тебе метод, который и воплощает в себе твою любимую логику обновления. можешь модифицировать его под свои нужды.
з.ы. а вообще, чиловек, я бы даже рекомендовал попробовать использовать Enterprize Library. они там поднялись еще выше всей этой земной суеты. |
| Автор: kaa 6.1.2006, 13:44 |
| Да, с ADO я поработать неуспел, тока с ODBC... За код конечно спасиба А что такое Enterprize Library? |
| Автор: kaa 6.1.2006, 14:12 |
| Ладна, удачи всем пойду ломать се голову... |
| Автор: kaa 7.1.2006, 13:32 | ||||
В общем на меня сегодня в три часа ночи снизошло прозрение и я родил следующий код:
Вышеприведённый код нужен только для того, чтобы тупо вставить строку и обновить данные в БД - так сказать пробный вариант... Но тут начинаются траблы - когда я в строковой переменной (в любой) пишу вместо цифр буквы (например
Подскажите пожалуйста, почему он так странно реагирует на буквы? Ведь переменные один хрен - строки! Прошу не обращать внимание на корявость подставляемых значений - прога так сказать пробная... |
| Автор: -ser- 8.1.2006, 06:27 | ||
в 3 часа ночи лучше спать
|
| Автор: kaa 8.1.2006, 13:21 |
| -ser- Мдя-я-я-я... Вот это я лажанулся Усё работат |
| Автор: kaa 15.1.2006, 00:29 |
| Гм, а у меня тут возник чисто академический вопрос - зачем вообще нужно средство обновления баз данных с помощью хранимых процедур, если они и запросами неплохо обновляются? ЗЫ: Честно говоря незнаю, в тему или нет... |
| Автор: lovermann 15.1.2006, 00:56 |
| Это уже другой вопрос (см. правила), и хотя мне бы не следовало тебе отвечать в этой теме, всё же: Выгод много.. вот некоторые из них:
|
| Автор: kaa 15.1.2006, 01:11 |
| Спасибо за ответ |
| Автор: Hidrag 29.1.2006, 23:28 | ||
| -ser- Спасибо за приемер в начале топика! Немного модифицировав применил к своему случаю:
...то есть удаляю из таблицы строчку и хочу обновить данные, а они не хотят обнавляться, что не так? |
| Автор: -ser- 30.1.2006, 09:02 | ||||||||
| Hidrag Существует масса более простейших способов удалить строку из таблицы. Например, тот же ExecuteNonQuery()
Но раз уж у мы хотим использовать один универсльный метод для всего, включая удаление, то давай посмотрим что в нашем случае получается. Поскольку ты уже предупредил -Восстановление будет невозможным-, так тогда сразу и удаляй, т.е. вместо вызова ds.AcceptChanges(), вызывай метод с содержимым okBut_Click. зачем ты его вынес в отдельную кнопку? а если она не будет нажата?. А у тебя еще получается что вызов ds.AcceptChanges() сбрасывает все флаги изменений, т.е. делает DataRowState проперти равным Unchanged и соответственно ds.HasChanges всегда возвратит false. Другой немаловажный момент я бы хотел чтобы ты обратил внимание
это может работать только в одном исключительном случае, когда в датагрид залита одна таблица целиком без права сортировки грида, т.е когда позиция строк в дг и таблице совпадают. А на практике это практически никогда не случается. Используй CurrencyManager, для связи содержимого контрола (в нашем случае датагрид) с таблицей в датасете, в противном случае мы рискуем удалить совсем не ту строку.
Вот теперь выбранный row совпадает с соответствующей строкой таблицы в нашем датасете.
Разумеется, после удаления строки необходимо освежить датасет и датагрид соответственно. |
| Автор: Hidrag 6.2.2006, 20:59 | ||
Исправил....
но где то все равно ошибка, не удаляет строку.... Ошибка: "Несоответствие типов данных в выражении условия отбора". А это не может зависить от типа поля (ID) по которому удаляю строку в аксессе (текстовый, счетчик, числовой)? |
| Автор: -ser- 7.2.2006, 05:48 |
| похоже на то, и вроде все правильно если ID имеет тип int (было бы странным если ID был текстовый). может в аксессе свои нюансы. попробуй удалить строку с помощью этого же sql-запроса в самом аксессе, что он говорит? |