![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
brother79 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: нет Всего: 6 |
Здравствуйте.
На текущем этапе нужен простой вар-нт редактирования таблицы. Я использую DataGridView Нашёл где-то такой код:
Принципе работает, с некоторыми неточностями. Когда сохраняется последняя строка таблицы, которая новая - то при первом сохранении - сохраняется нормально, автоматически расчитывается id как автоинкремент, но в самой таблице в компоненте - id никак не обновляется и при повторном сохранении этой строки - срабатывает исключение. Как правильно сделать это простое сохранение результатов? |
|||
|
||||
brother79 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: нет Всего: 6 |
Что-то порылся порылся очень даже не глупый вопрос получается :( Ghtдлагают делать через хранимую процедуру своё добавление с возвратом параметра. А других вар-ов нету?
|
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
без хранимки можно, просто используя два sql statement для выполнения. Подробнее: http://msdn.microsoft.com/en-us/library/ks9f57t0.aspx
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
brother79 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: нет Всего: 6 |
Почитал, можно select добавить после insert только в этом дураском TableAdapter не могу найти куда свой запрос на добавление засунуть. И вообзе компоненту sqlDataAdapter не вижу, которая в доке описана.
|
|||
|
||||
jonie |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
В общем я тут поразмыслил и сделал следующую штуку.
1) я унаследовался от TableAdapter-а, который использовал назвав класс TblTableAdapter2, чтобы можно было override-днуть методы
Собственно посмотрев в код, можно убедиться что если вызывать AcceptChanges, то будет вызван первый (в отличие от ручного добавления)... возможно надо будет переопределить и другие методы (не смотрел) которые инсертят данные (на первый взгляд таковых более нет). 2) я сделал метод у адаптера в DataSet-е который получает последний вставленный Id-шник по sql запросу select @@IDENTITY (см. примечание2) 3) в перегруженном методе Update у себя я произвожу обновления по одной строке ,статус которой равен Added, после чего руками меняю её Id шник и снова сбрасываю ее состояние на Unchanged вызывая AccepChanges(). 4) а да, в коде сгененым дизайнером я подменил название класса Адаптера на мой унаследованный руками (в дальнейшем визуальный редактор не будет это ломать). Пример в аттачменте... Примечания: 2) В примере я использовал SQLCe в котором обычно нет конкуренции при вставках данных. Однако, для MSSQLя не уверен что базовый Update у адаптера не производит соединение\отсоединение Connection от источника данных, это надо проверить, если не производит тогда хорошо - у нас есть сессия, в рамках которой можно использовать SCOPE_IDENTITY(). . это надо проверить например тем же профилировщиком для MSSQL.... Да, наверно можно открыть пееред base.Update-тами соединение, и использовать метод Insert() , т.к. он не закрывает-открывает соединение, если оно уже открыто:
Это сообщение отредактировал(а) jonie - 5.10.2010, 11:21 Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
umlprog |
|
||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 5.12.2009 Репутация: нет Всего: нет |
А просто перезаполнить свой грид после апдейта не пробовали? ![]() |
||||
|
|||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
umlprog, это не нормальный подход, "школьный" ....
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
brother79 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: нет Всего: 6 |
Что-то я запарился уже с этими таблицами.
С наследованием - что-то не разобрался пока, я делаю на wpf - там немного отличается похоже. а так просто - сделал запрос в датасете чтобы последнюю добавленную дёргать как в примере - но он не дёргает никак. Я уже сделал запрос на добавление отдельный, подряд сначала добавление вызываю, потом хочу последний дёрнуть - он пустоту возвращает и всё. |
|||
|
||||
brother79 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: нет Всего: 6 |
Дошёл до такого кода:
1) не могу получить никак последний id, запрос пустой получается 2) Когда делаю мерге - у меня добавляется строка, вместо того, чтобы поменять id, т.е. не правильный подход Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
brother79 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: нет Всего: 6 |
Сделал так:
Теоретически работает, только не нравится костыль с вычислением добавленного id, который просто получается как max(id). Так я это и не смог победить |
|||
|
||||
brother79 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: нет Всего: 6 |
Если я руками добавляю эл-нт, типа:
Как вычислить позицию для System.Windows.Data.CollectionViewSource ? |
|||
|
||||
brother79 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 471 Регистрация: 18.8.2009 Репутация: нет Всего: 6 |
Sory, поторопился с выводами
Это сообщение отредактировал(а) brother79 - 13.10.2010, 12:02 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [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. |