Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 10

Работа с SqlCommandBuilder

21.01.2010, 23:27. Показов 4126. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемое сообщество!
Хочу спросить о применении SqlCommandBuilder. Проблема заключается в том, что после обновления таблицы на сервере с помощью комманд генерированных SqlCommand Builder в приложении не обновляются автоинкрементные поля таблицы, следовательно если обновлять таблицу, а затем например ее дочернюю таблицу, то машина ругатся - нарушено ограничение(естественно записи родительской таблицы зафиксированы на сервере, а в локальной базе в датасете стоять прежние поля). SqlCommandBuilder вообще штука капризная как о ней говорят. Ещё хочу спросить попутно - если требуется в различных формах создавать SqlDataAdapter в ручную, как соответственно назначать им соединение, где прописать это глобальное соединение. Вроде логично сделать свой класс, который содержит и параметры соединения и методы установления соединения со всеми обработками ошибок и т.д., а затем назначать его SqlCommand, SqlAdapter и т.д. Многие люди, даже не новички в программировании, но новички в ADO.NET, не понимают логику работы с соединениями. Что делать в дизайн тайме, если логично иметь одно соединение, а не плодитьих на каждой форме!
Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2010, 23:27
Ответы с готовыми решениями:

SqlCommandBuilder в LocalDB
Есть такой код, для локальной базы данных. private void UpdateBase() { SqlCommandBuilder cmdbl = new...

SQLCommandBuilder провоцирует нарушение параллелизма
Добрый день, коллеги. Столкнулся с проблемой записи в базу коллекции таблиц (3-8 штук в одном DataSet). Суть проблемы в том, что при...

Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления
Помогите пожалуйста найти летиратуру, в которой бы описывались работа с событиями,работа со всеми элементами управления(toolbox).И если...

7
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 - используйте его. Для обновления данных в локальных таблицах - подтяните заново просто эти таблицы и все. Как то так...
C#
1
2
table1.Clear();
dAdapter.Fill(table1);
2. Можно просто после каждого изменения в данных вызвать, например, соответсвующую хранимку для таблички. (Добавил строку - вызвал хранимку InsertIntoTable1)

все это конечно реализовывается в вашем классе...
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2010, 12:51
Помогаю со студенческими работами здесь

Работа - проведение обучающих семинаров по C#. Работа по выходным дням ( сб-вс - 32 часа). От 30 000р.
Обязанности - проведение обучающих семинаров по C# Базовый (начальный уровень). Опыт преподавания не обязателен, главное чтобы вы не...

Работа формы в фоне, вне фокуса (работа с раскладкой клавиатуры)
Как заставить это работать в фоне? Даный код работает пока форма в фокусе, как только ее отпускаем - она не реагирует. Public...

Работа с Меню. Сохранение, печать, создать новый. Работа с рисованием
В общем сабж. Делается программа, которая должная Сохранять, печатать и очищать поле (создать новый/очистка). Также хочу спросить как...

Количество подведенного и отведенного тепла, работа сжатия, работа расширения
Определить количество подведенного и отведенного тепла, работу сжатия, работу расширения, полезную работу и КПД цикла предыдущей...

Работа с файловой системой (системное название некоторых папок и работа со скрытыми документами)
Всем привет, подскажите каким образом можно из VBA сохранить документ txt в папке "Общие документы" и задать для него свойство...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
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, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru