|
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
|
|
InsertCommand с использованием TableAdapter и полей по умолчанию15.09.2019, 11:02. Показов 1613. Ответов 8
Всем привет!
Создаю адаптеры таблиц TableAdapter. В таблице в базе MSSQL для полей DatCreate и UserCreator указаны значения по умолчанию (getdate() и suser_sname() соответственно). Далее на форму добавляю грид (devexpress GridControl) и указываю ему одну из таблиц. Теперь при создании на форме в этой таблице новой строки и вызова метода Adapter.Update(myTable), конечно же, вылазит ошибка, что значение не может быть null для полей DatCreate и UserCreator. Как вы решаете данную проблему? Я вижу несколько путей решения или попыток: 1) В созданном адаптере в команде InsertCommand удалить эти поля. Но тогда при повторной генерации кода адаптера эти поля вернуться. К тому же, поля указаны как AllowDBNull=false, поэтому плюсом происходит проверка в DataColumn.CheckNullable. 1.1) Тогда можно этим колонкам поставить AllowDBNull=true, а в InsertCommand также удалить их. Тогда все без ошибок отработает, но, как уже указал выше, при повторной генерации кода все вернется как было. 2) Добавить в адаптер метод на вставку, в котором укажу все поля за исключением DatCreate и UserCreator. а) Но тогда придется как то подменять стандартную InsertCommand на новую и вызывать Update (хотя в этом случае опять будет проблема проверки DataColumn.CheckNullable). б) Либо вызывать этот метод заместо Adapter.Update, когда происходит вставка в таблицу, но я даже не знаю, как это сделать. Наверное делать GetChanges у таблицы и брать те строки, которые вставляются, пройтись foreach по ним и вызвать мой метод Insert. А как тогда в этом случае указать, что не нужно вызывать InsertCommand у адаптера, но следует вызвать другие (update и delete)? И потом придется вызывать еще метод Fill. Плюсом ко всему, опять возникает проблема проверки DataColumn.CheckNullable. 3) Для одной и той же таблицы создать два адаптера: в одном будут все поля кроме полей по умолчанию, а в другом первичный ключ и поля по умолчанию. Создать между ними связь по первичному ключу, в первом адаптере создать поля, которых не хватает, и в свойстве Expression указать Parent.DatCreate и Parent.UserCreator. Но в таком методе возникает проблема скорости обращения к таблице, потому что придется два раза делать Select к таблице, а что если данных много? Все перечисленные мной методы имеют место быть, но не являются быстрыми и удобными (в таком случае я вообще мог бы вручную создавать адаптеры и прописывать команды вставки, обновления и удаления, а также кэпшены и другие свойства колонок). Может кто сталкивался с такой проблемой и решал как-нибудь? Ладно бы таких таблиц было мало (а лучше всего одна), но их много, и будут появляться еще, и не очень хотелось бы делать большие манипуляции с настройкой каждого адаптера. Лучше использовать время для разработки основных бизнес-процессов программы. Надеюсь, вы мне поможете и направите мысли в нужное русло. Спасибо!
0
|
|
| 15.09.2019, 11:02 | |
|
Ответы с готовыми решениями:
8
заполнение полей по умолчанию Пользователь по умолчанию+заполнение полей Наследование и значения полей по умолчанию |
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
||
| 15.09.2019, 13:22 | ||
|
0
|
||
|
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
|
||
| 16.09.2019, 06:47 [ТС] | ||
|
0
|
||
|
.NET
133 / 91 / 44
Регистрация: 17.08.2015
Сообщений: 296
|
||
| 16.09.2019, 07:57 | ||
|
Добавлено через 2 минуты так же можно добавить пару текстбоксов для вставки значения по кнопке. Тогда с GETDATE() проблем не будет
0
|
||
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
|
| 16.09.2019, 08:39 | |
|
Sanches, вы правы, то был плохой совет.
В select запросе адаптера не указывайте поля по умолчанию и тогда они будут созданы корректно.
0
|
|
|
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
|
||||
| 16.09.2019, 08:57 [ТС] | ||||
|
Я очень надеялся, что данные поля уйдут из InsertCommand (да и UpdateCommand тоже), если бы я поставил данные поля ReadOnly=true у DataColumn. Но, увы...
0
|
||||
|
.NET
133 / 91 / 44
Регистрация: 17.08.2015
Сообщений: 296
|
||||||||||||
| 16.09.2019, 09:00 | ||||||||||||
1
|
||||||||||||
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
|
| 16.09.2019, 10:33 | |
|
Sanches, https://social.msdn.microsoft.... netdataset
В качестве решения предлагается редактирование InsertCommand, использование триггера и др. Я бы сначала создал адаптер с запросом без полей по умолчанию, а после создания INSERT,UPDATE команд заменил в SELECT запрос на полный.
1
|
|
|
4 / 4 / 5
Регистрация: 01.03.2013
Сообщений: 180
|
|||
| 16.09.2019, 11:08 [ТС] | |||
|
Может есть возможность без помощи парсера добавить (или удалить) поля из SELECT'а? Чтобы не переписывать весь запрос. Есть идея, как реализовать способ, который я описал в первом посте под цифрой 2. Если получится, то выложу сюда. Хочется, чтобы использование адаптера было такое: создал его как обычно, указал где нибудь, какие поля являются полями по умолчанию, и все. Далее при вызове Update (уже другой, собственный метод Update у TableAdapter) уже пойдет анализ InsertCommand'ы и полей, которые указаны как поля по умолчанию, чтобы из команды они были исключены. А потом, когда insertCommand у адаптера будет заменен, будет вызван метод Update у TableAdapter.Adapter. Еще оформить это как расширение, чтобы потом можно было использовать везде. Как вам идейка?
0
|
|||
| 16.09.2019, 11:08 | |
|
Помогаю со студенческими работами здесь
9
Значение полей по умолчанию : "нет значения поля по умолчанию"; "Null";"0" Определить конструктор для инициализации полей по умолчанию
Задание значений по умолчанию для полей и элементов управления Как убрать затенение полей кодов из текста, при выделении ( стоит в ворде по умолчанию) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|