![]() |
|
Модераторы: gambit |
![]()
|
|
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Тут в процессе изучения C# столкнулся с одной проблемой - нигде немогу найти вразумительного описания обновления информации в базе данных средствами DataAdapter. Знаю что в ADO.NET логику обновления надо писать самому. А как писать, что писать, какие св-ва и методы приметь толком нигде (из того что я видел) не говориться. Я бы попросил знающих людей объяснить
|
|||
|
||||
| -ser- |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 1.2.2005 Репутация: 4 Всего: 13 |
ну что ты все заладил со своей логикой обновления. видать не работал с простым АДО и уж тем более без него.
поскольку ты ничего из 700 станиц по АДО.НЕТ не понял, что не удивительно, давай начнем с конкретики, с самых азов. что ты хочешь сделать? вообщем-то всю необходимую информацию по работе с АДО.НЕТ для себя я нашел на этом форуме. вот, например, начни отсюда http://forum.vingrad.ru/index.php?showtopi...mp;#entry213780 но здесь нехватает одной существенной детали. да, все знают что обновления осуществляются с помощью
но в таком виде это просто не работает, то есть обновления не будут записаны, и здесь есть одна хитрость, о которой не везде упоминается (по крайней мере год назад, когда я это осваивал). а именно, для этого необходимо создать новый датасет, который и содержит только наши изменения. вот тебе метод, который и воплощает в себе твою любимую логику обновления. можешь модифицировать его под свои нужды.
з.ы. а вообще, чиловек, я бы даже рекомендовал попробовать использовать Enterprize Library. они там поднялись еще выше всей этой земной суеты. -------------------- "Тонкая, однако, работа." |
||||
|
|||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Да, с ADO я поработать неуспел, тока с ODBC... За код конечно спасиба
А что такое Enterprize Library? |
|||
|
||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Ладна, удачи всем пойду ломать се голову...
|
|||
|
||||
| Exception |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 2 Всего: 186 |
http://forum.vingrad.ru/index.php?showtopic=76374
Ну, ИМХО не сложно самому создать свои объекты доступа к данным. Как я всегда и делаю. А они, в свою очередь, работают на типизированном датасете. |
||||
|
|||||
| kaa |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
В общем на меня сегодня в три часа ночи снизошло прозрение и я родил следующий код:
Вышеприведённый код нужен только для того, чтобы тупо вставить строку и обновить данные в БД - так сказать пробный вариант... Но тут начинаются траблы - когда я в строковой переменной (в любой) пишу вместо цифр буквы (например
Подскажите пожалуйста, почему он так странно реагирует на буквы? Ведь переменные один хрен - строки! Прошу не обращать внимание на корявость подставляемых значений - прога так сказать пробная... |
||||
|
|||||
| -ser- |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 1.2.2005 Репутация: 4 Всего: 13 |
в 3 часа ночи лучше спать
-------------------- "Тонкая, однако, работа." |
|||
|
||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
-ser-
Мдя-я-я-я... Вот это я лажанулся Усё работат |
|||
|
||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Гм, а у меня тут возник чисто академический вопрос - зачем вообще нужно средство обновления баз данных с помощью хранимых процедур, если они и запросами неплохо обновляются?
ЗЫ: Честно говоря незнаю, в тему или нет... |
|||
|
||||
| lovermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 28.12.2004 Где: Прага Репутация: нет Всего: 8 |
Это уже другой вопрос (см. правила), и хотя мне бы не следовало тебе отвечать в этой теме, всё же:
Выгод много.. вот некоторые из них:
Это сообщение отредактировал(а) lovermann - 15.1.2006, 01:13 |
|||
|
||||
| kaa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
Спасибо за ответ
|
|||
|
||||
| Hidrag |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 1 Всего: 25 |
-ser- Спасибо за приемер в начале топика!
Немного модифицировав применил к своему случаю:
...то есть удаляю из таблицы строчку и хочу обновить данные, а они не хотят обнавляться, что не так? -------------------- |
|||
|
||||
| -ser- |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 1.2.2005 Репутация: 4 Всего: 13 |
Hidrag
Существует масса более простейших способов удалить строку из таблицы. Например, тот же ExecuteNonQuery()
Но раз уж у мы хотим использовать один универсльный метод для всего, включая удаление, то давай посмотрим что в нашем случае получается. Поскольку ты уже предупредил -Восстановление будет невозможным-, так тогда сразу и удаляй, т.е. вместо вызова ds.AcceptChanges(), вызывай метод с содержимым okBut_Click. зачем ты его вынес в отдельную кнопку? а если она не будет нажата?. А у тебя еще получается что вызов ds.AcceptChanges() сбрасывает все флаги изменений, т.е. делает DataRowState проперти равным Unchanged и соответственно ds.HasChanges всегда возвратит false. Другой немаловажный момент я бы хотел чтобы ты обратил внимание
это может работать только в одном исключительном случае, когда в датагрид залита одна таблица целиком без права сортировки грида, т.е когда позиция строк в дг и таблице совпадают. А на практике это практически никогда не случается. Используй CurrencyManager, для связи содержимого контрола (в нашем случае датагрид) с таблицей в датасете, в противном случае мы рискуем удалить совсем не ту строку.
Вот теперь выбранный row совпадает с соответствующей строкой таблицы в нашем датасете.
Разумеется, после удаления строки необходимо освежить датасет и датагрид соответственно. -------------------- "Тонкая, однако, работа." |
||||||||
|
|||||||||
| Hidrag |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 1 Всего: 25 |
Исправил....
но где то все равно ошибка, не удаляет строку.... Ошибка: "Несоответствие типов данных в выражении условия отбора". А это не может зависить от типа поля (ID) по которому удаляю строку в аксессе (текстовый, счетчик, числовой)? -------------------- |
|||
|
||||
| -ser- |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 1.2.2005 Репутация: 4 Всего: 13 |
похоже на то, и вроде все правильно если ID имеет тип int (было бы странным если ID был текстовый).
может в аксессе свои нюансы. попробуй удалить строку с помощью этого же sql-запроса в самом аксессе, что он говорит? -------------------- "Тонкая, однако, работа." |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |