Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C#: Работа со связанными SQL-Таблицами

38K
14 января 2011 года
EqKeeper
94 / / 19.02.2010
C#, VS2010, MySQL

Доброго времени суток! Уже второй раз сталкиваюсь с базами данных, в которых таблицы взаимосвязаны.

К примеру:
В таблице birthdays есть поле User с целочисленными значениями. В таблице user есть поля id и name - целочисленные. В таблице name есть поля id, firstname, surname, patronymic.

Вот как с ними в таком случае работать? (Ах да, бывает еще, что связанная таблица ссылается на еще одну, а та отсылает к первой - замкнутый круг).
Это лишь для примера. На деле - огромная база с ~150 таблицами.

Нужно нарисовать удобный интерфейс для выборки. К примеру:
Считать всех пользователей и вывести в списке в виде фамилий, в скобках указывая ID. Когда юзер выбирает в списке фамилию, выводятся подробные данные о пользоватлеи - фамилия, имя, отчество, дата рождения.

Ну, и при этом важно помнить об упомянутых выше зацикленных таблицах и их количестве. Я очень мало работал с базами данных и поэтому не совсем понимаю - как с ними правильно работать, что делать можно, а что нельзя. Что-то мне подсказывает, что 150 октрытых соединений - это не хорошо. Если же... в общем, идей то куча, но все какие-то левые.

Предыдущей работой был редактор юнитов для игры Disciples 2 и там я перегонял все таблицы в массивы и работал уже с ними. Но тут нужен оперативный доступ к данным. Как его добиться - ума не приложу.

Подключаюсь я к MySQL, используя их официальный коннектор...
1
15 января 2011 года
kot_
7.3K / / 20.01.2000
150 таблиц на самом деле - это отнюдь не огромная база. Но впрочем это так, к слову.
Я так понимаю что первое что тебе надо сделать - это найти книгу из разряда "for stupid" и прочесть раздел который называется "Работа с БД".
А уже затем надо задавать вопрос на форуме.
38K
15 января 2011 года
EqKeeper
94 / / 19.02.2010
Ты, как всегда, деликатен. :)
Но за дельный совет спасибо. Я попробую.
Тем не менее, в свое время нечто подобное уже предлагалось и простой пример помог мне куда лучше. Есть люди которым легче учиться, читая умные (и не очень) книжки. А есть такие, как я - которые начинали писать, глядя на чужие примеры и продолжают учиться тем же образом.

---

Гугл привел меня к этой книге:
http://window.edu.ru/window_catalog/files/r65225/150.pdf

Копаю в верном направлении?

---

О! BindingSource! Интересно!

---

Книга открыла глаза на многие вещи, касательно БД, SQL и моего вопроса в частности.
Спасибо за пинок в нужную сторону! :)
1
15 января 2011 года
kot_
7.3K / / 20.01.2000
ну как могу. :)
учится на примерах - это верно. Но некоторая база все равно необходима. Я думаю что после прочтения книги по диагонали большая часть вопросов (про 150 подключений например) отпадет. А те что останутся будут более осмысленными.
38K
16 января 2011 года
EqKeeper
94 / / 19.02.2010
Поначалу отпали все вопросы. Но к трем часам ночи начали возникать новые...:rolleyes:

Уткнулся в DataRelation и не могу ее разгрызть.
Задача тривиальна - связать две таблицы, пробую:
 
Код:
DataRelation dataRelation = new DataRelation("Должность", dataSet.Tables["Users"].Columns["Job"], dataSet.Tables["Jobs"].Columns["ID"]);

Получаю исключение:
Цитата:
Столбец "JobID" содержит повторяющиеся значения.



Пробую:

 
Код:
DataRelation dataRelation = new DataRelation("Должность", dataSet.Tables["Jobs"].Columns["ID"], dataSet.Tables["Users"].Columns["Job"]);


Получаю исключение:
Цитата:
Невозможно включить это ограничение, т.к. не все значения имеют соответствующие родительские значения.



Как быть? Удаление неиспользуемых записей невозможно ввиду того, что они могут когда-нибудь кому-нибудь понадобиться. Да и не верно это - прокладывать связи от дочерних таблиц к родительским. А в родительской, в этом поле, естественно будут дубли. И чего ему не нравится? Специально прошелся по всем таблицам после загрузки в DataSet и задал им PrimaryKey, вручную указав колонки там, где не хватало только первой (заодно исправил с десяток ошибок в БД, включая нулевые значения там, где их быть не должно >_>).

В примерах рассмотрено только два случая - когда данные в столбцах уникальны, и когда в обеих таблицах присутствуют одни и те же поля. Но у меня то всего одно поле для идентификации... Как в этом случае провесить сопоставления?:confused:

5
16 января 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: EqKeeper
...Специально прошелся по всем таблицам после загрузки в DataSet ...

Не используй DataSet. Есть гораздо более удобные средства: EntityFramework либо BLToolkit.

38K
16 января 2011 года
EqKeeper
94 / / 19.02.2010
Эх... пошел гуглить. :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог