|
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
|
|
MS SQL ID связанных таблиц 217.05.2020, 11:06. Показов 8684. Ответов 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
|
|
|
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,728
|
||
| 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
|
||||||
|
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,728
|
|||||||
| 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
|
|
|
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,728
|
||
| 05.10.2020, 19:40 | ||
|
0
|
||
| 05.10.2020, 19:40 | |
|
Выборка данных из связанных таблиц Вывод связанных таблиц в DataGridView Обновление связанных таблиц в DataGridView Обновление связанных таблиц в datagridview Отображение полей связанных таблиц Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2.
Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
|
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её.
Всё это стресс конечно. Почему?. . .
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|