![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Приветствую всех.
Предположим имеется БД с тремя таблицами: поставщики, товары и поставщики-товары. Так как поставщик может поставлять различные товары и товар может поставляться различными поставщиками имеет место быть промежуточная таблица. Поставщики кодПоставщика РК название адрес ... Товары кодТовара РК название цена ... Поставщики-Товары кодПоставщика РК FK кодТовара РК FK кодТовара_У_Поставщика описаниеТовара_У_Поставщика ... Каждую строку(record) в таблице описывает класс. Таблица в целом - List<Record> Для сохранения данных в БД в классе написано два приватных метода: первый для insert, второй для update. А какой из них выполнять определяет публичный метод класса
Как видно из кода, если запись существует(имеет id) то вызывается метод update, если записи еще нет то вызывается метод add. А теперь собственно вопрос. Как мне реализовать публичный метод для составного ключа в таблице. Ведь я по любому имею id товара и id поставщика. Но в одном случае мне нужно добавить строку в таблицу БД, а во втором, например, изменить описание товара у поставщика. По какому условию вызывать тот или иной метод? Что-то я ни как не соображу. ![]() Заранее спасибо. Добавлено через 5 минут и 12 секунд Да, спросите почему метод SaveEntity один? Потому как он вызывается при нажатии кнопки "save" в BindingNavigator на форме. Поэтому нужно реализовать логику выбора в одном методе, а не "разделять" кнопку навигатора на две. ![]() -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
ИМХО тебе нужно: - получить список (List<T>) всех поставщиков и проверить, содержит ли он твой кодПоставщика. Если содержит - Update(), иначе - Add() - то же самое сделать по товарам. Ничего военного, логика работы почти та же, что и в SaveEntity() А еще лучше - сделать в классах поставщика и товара по методу SaveEntity, где сам поставщик (или товар) будет определять, Update() ему делать или Add(). А в "Поставщики-Товары" просто вызывай
-------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
tol05,
Привет. Классы описывающие поставщика и товар содержат методы SaveEntity() для них самих. Повторюсь. Соответственно этот метод, в каждом классе, определяет сохранять строку(новую) в таблицу или же внести изменения в нее(существующую строку). В данном случае логика проста, если есть такая строка, то в классе её описывающем свойство id >0. А теперь мне надо вносить или изменять строку в промежуточную таблицу. У меня есть id поставщика, у меня есть id товара от этого поставщика и код этого товара, присвоенный поставщиком, может присутствовать описание от поставщика на данный товар. Надо определить вносить новую запись в таблицу или изменять существующую. Перебирать все строки промежуточной таблицы на наличие комбинации id+id как-то не кошерно. Ладно будем думать. Удачи тебе. ![]() А я пока на работу. ![]() -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
D_F_V |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 27.3.2007 Где: Vladivostok Репутация: нет Всего: 1 |
Если есть промежуточный DataTable то можно так...
думаю мысль понятна... ![]() |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
Так... теперь понятно. Сделай в базе хранимую процедуру, внутри примерно такой код
ну и вызывай ее в Поставщики-Товары.SaveEntity() ... Если вернется что-то, то значит делаешь Update(), иначе - Add() -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
tol05,
Так-с идея понятна. Завтра после работы попробую. Сегодня вечером сдавать экзамен. А пока снова на работу. Обеденный перерыв такой короткий, блин. Ох уж это "буржуинство". ![]() Добавлено через 47 секунд D_F_V, Спасибо за участие. ![]() -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Можно для ускорения проверять только кол-во записей:
Выполнять запрос через dbCommand.ExecuteScalar, в результате будет кол-во строк. -------------------- ![]() |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
да, но если [кодПоставщика] + [кодТовара] = Primary Key (т.е. должны быть уникальны), то тогда всегда будет только одна строка с таким [кодПоставщика] и таким [кодТовара].
К тому же, если такая строка есть, то ее нужно апдейтать, а значит, лучше сразу ее же и вернуть из процедуры. Но я в БД ... не очень ... поэтому на своем варианте не настаиваю. ![]() -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
1 поставщик продал только 1 товар, и всё?
![]() В primary key таблицы Поставщики-Товары не хватает третьей колонки. Типа собственный ID-шник. И можно назвать таблицу "продажи" чтобы было понятно ![]() Всё ИМХО. Кстати, это называется "отношение многие-ко-многим". -------------------- ![]() |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
mr.DUDA,
Приветствую. ![]() Давно не было. Как жизнь?
Что бы мне было понятно таблица называется tblLeveranciersArtikelen. И к продажам она никакого отношения не имеет. ![]() Потому как часто возникает необходимость найти в базе данные на товар не по своему коду, а именно по коду поставщика. А за count спасибо. Используя count в хранимой процедуре, при ее выполнении получу либо НОЛЬ либо ЕДИНИЦУ. То что доктор прописал. ![]() С наилучшими ![]() Это сообщение отредактировал(а) thomas - 19.12.2007, 23:59 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
ну значит я не понял вопроса. Что ж, буду отвечать только на те вопросы, которые смог понять. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
tol05,
Ты все нормально понял. Поставщик может продать один товар и все, а может и много. mr.DUDA просто развил , по моему, твою идею до логического завершения. Спасиб. Всем привет, побежал сдавать экзамен. ![]() -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Ok, это я не так понял ![]() З.Ы. жизнь налаживается, на форуме буду появляться почаще. -------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |