|
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 10
|
|
Работа с SqlCommandBuilder21.01.2010, 23:27. Показов 4126. Ответов 7
Метки нет (Все метки)
Здравствуйте, уважаемое сообщество!
Хочу спросить о применении SqlCommandBuilder. Проблема заключается в том, что после обновления таблицы на сервере с помощью комманд генерированных SqlCommand Builder в приложении не обновляются автоинкрементные поля таблицы, следовательно если обновлять таблицу, а затем например ее дочернюю таблицу, то машина ругатся - нарушено ограничение(естественно записи родительской таблицы зафиксированы на сервере, а в локальной базе в датасете стоять прежние поля). SqlCommandBuilder вообще штука капризная как о ней говорят. Ещё хочу спросить попутно - если требуется в различных формах создавать SqlDataAdapter в ручную, как соответственно назначать им соединение, где прописать это глобальное соединение. Вроде логично сделать свой класс, который содержит и параметры соединения и методы установления соединения со всеми обработками ошибок и т.д., а затем назначать его SqlCommand, SqlAdapter и т.д. Многие люди, даже не новички в программировании, но новички в ADO.NET, не понимают логику работы с соединениями. Что делать в дизайн тайме, если логично иметь одно соединение, а не плодитьих на каждой форме! Спасибо!
0
|
|
| 21.01.2010, 23:27 | |
|
Ответы с готовыми решениями:
7
SQLCommandBuilder провоцирует нарушение параллелизма Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления |
|
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
|
|
| 22.01.2010, 09:05 | |
|
Roman83, в дизайн тайме я бы вам вообще не советовал делать такие вещи. Как вы уже сказали - лучше написать свой класс, где будет и подключение и отключение, и остальные манипуляции с СУБД.
P.S. В чем конкретно вопрос?
0
|
|
|
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 10
|
|
| 22.01.2010, 09:43 [ТС] | |
|
Опишу подробнее!!! Я написал такой класс, помимо работы с соединением он может выполнять комманды, возвратить набор данных по переданной в качестве параметра хранимой процедуре или запросу(ну вообще что потребуется, то там реализовывать и надо как я понимаю). Получил набор данных содержащий две таблицы. Теперь мне надо с ним работать, я начинаю заполнять локальные данные вызовом NewRow() и т.д. Пока проблема возникла с отложенными изменениями, как сохранить этот набор - решение при таком подходе должно быть таковым - раз есть класс надо через него, но у меня нет DataAdapter вне класса, я могу объявить его в классе и реализовать подпрограмму сохранения передавая ему ту или иную таблицу или весь датасет, но при этом адаптер надо настраивать в ручную, я пытаюсь использовать SQLCommandBuilder он добавляет данные в базу, но не обновляет записи в локальных таблицах, вследствии чего на месте автоинкрементных полей остаются -1,-2 и т.д. - а это не есть хорошо.
Как вы уже догадались,я новичок в этом деле - как работать с таким классом, реализующим соединение не могу додуматься, это же все адаптеры вручную настраивать или что... Может у Вас там код такого класса и примеры использования есть или ссылки какие-нибудь? gjltkbntcm. Мне не в коммерческих целях
0
|
|
|
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
|
||||||
| 22.01.2010, 10:18 | ||||||
|
Roman83,
Ну здесь вариантов куча... 1. Если вы так хотите использовать SqlCommandBuilder - используйте его. Для обновления данных в локальных таблицах - подтяните заново просто эти таблицы и все. Как то так...
все это конечно реализовывается в вашем классе...
0
|
||||||
|
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 10
|
|
| 22.01.2010, 10:40 [ТС] | |
|
Сейчас у меня все через хранимые поцедуры и делается - добавил запись - изменил в базе, а конструктор класса принимает имя хранимой процедуры - только я вот думаю это корректно или нет, изменил в локольных таблицах - сразу дергать сервер, вроде азбука ADO.NET советует с отсоединенными данными больше работать. Это я должен может вставить хранимой процедурой а затем опять методом Fill все выбирать - я не знаю может так и надо, но на первый взгляд это не хорошо гонять от сервера данные. Сейчас я добавляю в локальную таблицу запись и вызываю хранимку т.е. иду параллельно изменяя локальные записи и записи на сервере, на первый взгляд такая ручная синхронизация не очень нравиться. И ещё вопрос, почему когда в дизайн тайме адаптер далаешь - он обновляет мои автоинкременты, а если вручную - то нет(как Вы советуете надо очистить таблицу и снова ее наполнить методом Fill)?
0
|
|
|
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
|
|
| 22.01.2010, 11:00 | |
|
Ну вы с отсоединенными данными и работаете.
Только, почему я за то что нужно подтягивать данные с сервера, так это потому что, Вы не один на этом сервере данные изменяете. И если наваять программу которая сначала все хранит у себя, и потом через "полчаса" посылает какой либо запрос на сервер (изменение данных например), а до это другой пользователь уже изменил данные - то это мягко говоря не хорошо получится... Так что не стесняйтесь часто "тыкаться" к серверу.
0
|
|
|
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 10
|
|
| 22.01.2010, 11:35 [ТС] | |
|
Благодарю за ответ. Скажите:
1) На Ваш взгляд хранимые процедуры или передача через адаптер лучше (я думаю хранимые процедуры - на то они и ХРАНИМЫЕ); 2) Нормальный вариант - согласование данных: заполнение из текстбоксов и т.д. локальной таблицы и тут же вызов хранимки с параметрами из текстбоксов(если вставка, то еще возврат инкрементированного поля и присвоение ключу в локальной таблицы), так вроде и к серверу по каждой записи обращаешся и Fill не дергаешь;
0
|
|
|
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
|
|
| 22.01.2010, 12:51 | |
|
1. Хранимые чем хороши - они не вшиты в код приложения. И если что то в базе меняется, то, скорее всего, достаточно будет подредактировать хранимку. А если запрос в приложении, то придется пересобирать приложение (что не есть good)
Но с использованием хранимок тоже я думаю не стоит борщить, и закидывать запрос вида select id from table1 в хранимку 2. А здесь уже, как я говорил, вариантов куча. Все зависит от задачи... Когда можно вообще данные не дергать, когда их нужно постоянно дергать - это уже частные случаи.
0
|
|
| 22.01.2010, 12:51 | |
|
Помогаю со студенческими работами здесь
8
Работа - проведение обучающих семинаров по C#. Работа по выходным дням ( сб-вс - 32 часа). От 30 000р. Работа формы в фоне, вне фокуса (работа с раскладкой клавиатуры) Работа с Меню. Сохранение, печать, создать новый. Работа с рисованием Количество подведенного и отведенного тепла, работа сжатия, работа расширения
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при изменении наименования справочника
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, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|