|
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
|
|
MS SQL ID связанных таблиц 217.05.2020, 11:06. Показов 8769. Ответов 88
Метки нет (Все метки)
Доброго времени суток, нужен совет(подсказка, пример) по следующей задаче:
Имеются в БД(MSSQL) две таблицы, головная "Покупки" и дополнительная "ПокупкаИнфо". У первой есть первичный уникальный ключ, по полю ID(со свойством IDENTITY). У второй таблицы есть составной "PRIMARY KEY(ПокупкаID,LineItem)". Получается связка такая, на каждый уникальный "Покупки.ID" приходится по нескольку "ПокупкаИнфо.ПокупкаID". С "Покупки.ID" автоматически(в SQL) создаётся новый номер. А вот с "ПокупкаИнфо.ПокупкаID" возникает вопрос: Как в С# сделать так , что бы для "ПокупкаИнфо.ПокупкаID" присваивался тот же номер что и у "Покупки.ID" ? Эта же тема была тут: ID связанных таблиц Но там сказали пойти сюда)
0
|
|
| 17.05.2020, 11:06 | |
|
Ответы с готовыми решениями:
88
Отображение связанных таблиц Работа с Id из связанных таблиц |
|
|
|||||||||||
| 30.09.2020, 08:36 | |||||||||||
|
7-2-3, а причем тут вот это???
Ну и про object уже сказали.
1
|
|||||||||||
|
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,914
|
|||||||||||
| 30.09.2020, 09:47 | |||||||||||
|
не пойму, зачем
set @ID = SCOPE_IDENTITY() что за императивщина?
0
|
|||||||||||
|
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
|
|||||||||||
| 30.09.2020, 13:52 [ТС] | |||||||||||
|
Я пытался вникнуть в [9], но мне просто-напросто знаний не хватает, что бы осмыслить написанное, соответственно и проблемы в самом понимании кода)
Получается каша в голове. На счёт транзакции, я думаю имеется введу едино-разовый обмен данными ? Вроде как, запросы должны выполнится зараз, при одном обмене ? Я уже пытался писать в ветку для новичков, с другим вопросом, но там после решения , модератор меня перекинул в ветку "C# Windows Forms", соответственно по аналогии , я сюда и написал. Добавлено через 17 минут А вот так правильно:
Добавлено через 14 минут
0
|
|||||||||||
|
|
|
| 30.09.2020, 13:58 | |
|
7-2-3, Параметры в ADO.NET - https://metanit.com/sharp/adonet/2.9.php
И там еще много чего интересного
1
|
|
|
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
|
||||||||||||||||||||||||||
| 30.09.2020, 22:28 [ТС] | ||||||||||||||||||||||||||
|
Прочитал первые 2 страницы, получается они там значение этого параметра idParam(в котором лежит полученный id) выводят на консоль:
Добавлено через 58 минут Поменял на вот эту абру-кадабру:
Понятно почему ноль:
И на счёт транзакций, что бы мои операции выполнялись в "виде одного целостного пакета ", мне нужно напихать вот эти строки:
0
|
||||||||||||||||||||||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 01.10.2020, 12:39 | ||
|
Есть "Клиент". Есть "сервер". Между ними "разговор". "Фразами". "Клиент" объясняет "серверу" что нужно сделать. Если эти объяснения идут в одной "фразе", то "Сервер" их выполнит все до последнего пункта. Или не выполнит ничего. Из-за ошибки. Любой. Но "Клиент" может свои объяснения оформить в несколько "фраз". И чтобы "Сервер" понял, что все эти "фразы" являются не чем-то самостоятельным, а единым целым, "Клиент" должен перед первой "фразой" сказать что-то типа "Начинаю передавать команды. Получай первую". А после последней "Все, я закончил". Если все это перевести на язык SQL-сервера, то получится : клиент открывает соединение и указывает, что явно запускает транзакцию. Сервер получает такую посылочку, создает у себя соединение и пишет в свой журнал, что открывается новая транзакция, завершение которой отложено и будет выполняться по ожидаемой то клиента этого соединения специальной интструкции. В Вашем случае Вы готовите пакет запросов (скрипт), который содержит все необходимые операции от первой до последней, а именно: 1) Добавление новой записи в Master, 2) Получение UID только что вставленной записи, 3) Добавление в Detail новой записи с использованием UID Master-записи. Все это заворачиваете в единую "фразу" (sqlcommand) и отправляете на сервер одним махом. Никакого дополнительного управления никакой транзакцией не требуется - сервер лучше Вас знает что и как делать. А вот если Вам надо последовательно послать несколько "фраз" (sqlcommand) одну за другой, то для гарантии правильности нужно использовать транзакцию. При этом надо помнить, что слишком большие интервалы между этими "фразами" могут привести к тому, что сервер прервет свое ожидание и "сбросит" транзакцию не дождавшись "финального свистка". Добавлено через 10 минут У Вас в первой "фразе" - sqlcommand выполняется вставка в Master и извлечение нового UID в некую переменную, которую, кстати, надо объявить инструкцией DECLARE перед всеми командами INSERT и SELEST. На этом "фраза" завершается. После этого идет посылка другой "фразы" - вставки в Detail. Но: - Во-первых, Вам надо получить этот самый UID, чтобы использовать далее и который Вы зачем-то возжелали сунуть в некий TextBox. - Во-вторых, не гарантия, что этот самый UID будет актуальным при второй фразе. Запись из Мастера с этим UID вполне может быть уже удалена в другом или даже этом же соединении. Для правильного решения этой проблемы Вам и привели корректный и гарантированный способ в [9]
1
|
||
|
|
||
| 01.10.2020, 12:42 | ||
0
|
||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 01.10.2020, 13:03 | |
|
0
|
|
|
14738 / 9512 / 1364
Регистрация: 21.01.2016
Сообщений: 35,901
|
||
| 01.10.2020, 13:09 | ||
|
0
|
||
|
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
|
||||||
| 01.10.2020, 21:18 [ТС] | ||||||
0
|
||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 01.10.2020, 21:42 | ||
|
А что вместо точек ? И таблицы у Вас называются MASTER и DETAIL ? Добавлено через 1 минуту Попробуйте запрос в MSSMS
0
|
||
|
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
|
||||||
| 01.10.2020, 22:27 [ТС] | ||||||
А как всё это привязывать к приложению ?
0
|
||||||
|
14738 / 9512 / 1364
Регистрация: 21.01.2016
Сообщений: 35,901
|
|||||||
| 02.10.2020, 05:55 | |||||||
IDbConnection.BeginTransaction или TransactionScope) иначе это всё надо обернуть в BEGIN TRANSACTION и COMMIT TRANSACTION.Ну и русский язык использовать в именовании сущностей - малое фу. А уж смешивать с английским - фу в квадрате.
1
|
|||||||
|
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,914
|
|
| 02.10.2020, 09:27 | |
|
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 02.10.2020, 11:09 | ||
|
1. На Клиенте. Вот этот скрипт всунуть как строку в sqlcommand, далее проинициализировать параметры и Execute 2. На Сервере Оформить код как хранимку (StoredProc) с параметрами непосредственно в БД (MSSMS) В коде вызывать эту SP опять же с подстановкой параметров - всех, кроме естественно NewId, он определится "внутри". Кстати, нормальной практикой вторым способом является возвращение хранимкой после вставки нового (новых) ID. Они очень могут понадобиться при локализации новой записи после перечитки грида. Ну это для того, чтобы после добавления новой записи в видимую таблицу (грид) именно эта запись становилась текущей, что весьма удобно при изменениях модальными формами.
1
|
||
|
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
|
||||||
| 02.10.2020, 23:26 [ТС] | ||||||
|
Получилась вот такая процедура:
0
|
||||||
|
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
|
||||||
| 03.10.2020, 22:24 [ТС] | ||||||
|
Нацарапал вот такую кнопочку:
Правда пока только для одной строки, возникает вопрос, тут лучше процедуру доработать или цикл какой-нибудь в кнопочку прилепить ? Что бы из dataGridView4, несколько строк вставлять в базу.
0
|
||||||
|
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
|
|
| 05.10.2020, 19:25 [ТС] | |
|
В другой раз я возможно воспользуюсь Вашим советом, но в данном случае хотелось бы как-нибудь "домучить" эту кнопку(пусть и с девятиэтажным кодом).
0
|
|
|
14738 / 9512 / 1364
Регистрация: 21.01.2016
Сообщений: 35,901
|
||
| 05.10.2020, 19:40 | ||
|
0
|
||
| 05.10.2020, 19:40 | |
|
Выборка данных из связанных таблиц Вывод связанных таблиц в DataGridView Обновление связанных таблиц в DataGridView Обновление связанных таблиц в datagridview Отображение полей связанных таблиц Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|