C#: Работа со связанными SQL-Таблицами
Доброго времени суток! Уже второй раз сталкиваюсь с базами данных, в которых таблицы взаимосвязаны.
К примеру:
В таблице birthdays есть поле User с целочисленными значениями. В таблице user есть поля id и name - целочисленные. В таблице name есть поля id, firstname, surname, patronymic.
Вот как с ними в таком случае работать? (Ах да, бывает еще, что связанная таблица ссылается на еще одну, а та отсылает к первой - замкнутый круг).
Это лишь для примера. На деле - огромная база с ~150 таблицами.
Нужно нарисовать удобный интерфейс для выборки. К примеру:
Считать всех пользователей и вывести в списке в виде фамилий, в скобках указывая ID. Когда юзер выбирает в списке фамилию, выводятся подробные данные о пользоватлеи - фамилия, имя, отчество, дата рождения.
Ну, и при этом важно помнить об упомянутых выше зацикленных таблицах и их количестве. Я очень мало работал с базами данных и поэтому не совсем понимаю - как с ними правильно работать, что делать можно, а что нельзя. Что-то мне подсказывает, что 150 октрытых соединений - это не хорошо. Если же... в общем, идей то куча, но все какие-то левые.
Предыдущей работой был редактор юнитов для игры Disciples 2 и там я перегонял все таблицы в массивы и работал уже с ними. Но тут нужен оперативный доступ к данным. Как его добиться - ума не приложу.
Подключаюсь я к MySQL, используя их официальный коннектор...
Я так понимаю что первое что тебе надо сделать - это найти книгу из разряда "for stupid" и прочесть раздел который называется "Работа с БД".
А уже затем надо задавать вопрос на форуме.
Но за дельный совет спасибо. Я попробую.
Тем не менее, в свое время нечто подобное уже предлагалось и простой пример помог мне куда лучше. Есть люди которым легче учиться, читая умные (и не очень) книжки. А есть такие, как я - которые начинали писать, глядя на чужие примеры и продолжают учиться тем же образом.
---
Гугл привел меня к этой книге:
http://window.edu.ru/window_catalog/files/r65225/150.pdf
Копаю в верном направлении?
---
О! BindingSource! Интересно!
---
Книга открыла глаза на многие вещи, касательно БД, SQL и моего вопроса в частности.
Спасибо за пинок в нужную сторону! :)
учится на примерах - это верно. Но некоторая база все равно необходима. Я думаю что после прочтения книги по диагонали большая часть вопросов (про 150 подключений например) отпадет. А те что останутся будут более осмысленными.
Уткнулся в DataRelation и не могу ее разгрызть.
Задача тривиальна - связать две таблицы, пробую:
Получаю исключение:
Пробую:
Получаю исключение:
Как быть? Удаление неиспользуемых записей невозможно ввиду того, что они могут когда-нибудь кому-нибудь понадобиться. Да и не верно это - прокладывать связи от дочерних таблиц к родительским. А в родительской, в этом поле, естественно будут дубли. И чего ему не нравится? Специально прошелся по всем таблицам после загрузки в DataSet и задал им PrimaryKey, вручную указав колонки там, где не хватало только первой (заодно исправил с десяток ошибок в БД, включая нулевые значения там, где их быть не должно >_>).
В примерах рассмотрено только два случая - когда данные в столбцах уникальны, и когда в обеих таблицах присутствуют одни и те же поля. Но у меня то всего одно поле для идентификации... Как в этом случае провесить сопоставления?:confused:
Не используй DataSet. Есть гораздо более удобные средства: EntityFramework либо BLToolkit.