powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Связь таблиц 1 ко многим (MySQL)
9 сообщений из 9, страница 1 из 1
Связь таблиц 1 ко многим (MySQL)
    #39419896
kamero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 2 таблицы созданные в MySQL. Для подключения к MySQL из под С# использую MySQLConnector Net.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
                MySqlCommand cmd = connection.CreateCommand();
                cmd.CommandText = "Select * from login";
                MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adap.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0].DefaultView;

                MySqlCommand cmd1 = connection.CreateCommand();
                cmd1.CommandText = "Select * from pass Where idl=@idl";
                cmd1.Parameters.AddWithValue("@idl", dataGridView1.CurrentRow.Cells[0].Value);
                MySqlDataAdapter adap1 = new MySqlDataAdapter(cmd1);
                DataSet ds1 = new DataSet();
                adap1.Fill(ds1);              
                dataGridView2.DataSource = ds1.Tables[0].DefaultView;         



До этого программировал на Делфи и там что бы сделать связь 1 ко многим надо было в дочернем Query в свойстве MasterSourse указать DataSourse главной таблицы и вуаля связь работает. А тут не могу догнать как реализовать связь.
...
Рейтинг: 0 / 0
Связь таблиц 1 ко многим (MySQL)
    #39419918
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Неважно какая база, главное объект DataRelation

https://msdn.microsoft.com/en-us/library/y8c0cxey(v=vs.110).aspx
...
Рейтинг: 0 / 0
Связь таблиц 1 ко многим (MySQL)
    #39426656
kamero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
        private void GetData()
        {
            MySqlConnection connection = new MySqlConnection(Properties.Settings.Default.MyConnectionString);
            connection.Open();
            try
            {
                DataSet data = new DataSet();
                data.Locale = System.Globalization.CultureInfo.InvariantCulture;

                MySqlCommand cmd1 = connection.CreateCommand();
                cmd1.CommandText = this.sqlMain;
                cmd1.Parameters.AddWithValue("@idh", Properties.Settings.Default.Hospital); // Вот сюда передаю параметр.
                MySqlDataAdapter masterDataAdapter = new MySqlDataAdapter(cmd1);
                masterDataAdapter.Fill(data, "main");

                MySqlCommand cmd2 = connection.CreateCommand();
                cmd2.CommandText = this.sqlPacient;
                MySqlDataAdapter detailsDataAdapter = new MySqlDataAdapter(cmd2);
                detailsDataAdapter.Fill(data, "patient");

                DataRelation relation = new DataRelation("MainPatient",
                data.Tables["main"].Columns["idm"],
                data.Tables["patient"].Columns["idm"]);
                data.Relations.Add(relation);

                masterBindingSource.DataSource = data;
                masterBindingSource.DataMember = "main";

                detailsBindingSource.DataSource = masterBindingSource;
                detailsBindingSource.DataMember = "MainPatient";
            }
            catch (MySqlException)
            {
                MessageBox.Show("Ошибка подключения к БД");
                Application.Exit();
            }
            finally
            {
                if (connection.State == ConnectionState.Open)
                {
                    connection.Close();
                }
            }
        }



Эм... в общем связь у меня получилась но как только я передаю в родительскую таблицу запрос с условием(допустим выбрать Пупкина) и отобразить только данные по нему. Получаю в лоб ошибку.

авторНеобработанное исключение типа "System.ArgumentException" в System.Data.dll

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

Убираю связь, все работает(Ну по отдельности). Подключаю опять и опять получаю ошибку. Сам запрос пробовал в БД ошибок нет.
...
Рейтинг: 0 / 0
Связь таблиц 1 ко многим (MySQL)
    #39426681
kamero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
                    sqlMain = "select m.idm, w.idh, w.fio as ФИО, p.posts as Должность, s.section as Отделение, w.data_r as \"Дата рождения\", w.phone as Телефон from main m" +
                                 " inner join section s on s.ids=m.ids" +
                                 " inner join workers w on w.idw=m.idw" +
                                 " inner join posts p on p.idp=m.idp" +
                                 " where w.idh = @idh";
                    sqlPacient = "Select idp, idm, fio as ФИО, adres as Адрес, data_r as \"Дата рождения\", data_p as \"Дата прихода\"," +
                                 "data_v as \"Дата выписки\", simptom as Симптомы, diagnoz as Диагноз, lec as \"Назначенное лечение\"  from patient";
...
Рейтинг: 0 / 0
Связь таблиц 1 ко многим (MySQL)
    #39426900
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
kameroЭм... в общем связь у меня получилась но как только я передаю в родительскую таблицу запрос с условием(допустим выбрать Пупкина) и отобразить только данные по нему. Получаю в лоб ошибку.
Не понял. Что такое "передаю в родительскую таблицу запрос"?
...
Рейтинг: 0 / 0
Связь таблиц 1 ко многим (MySQL)
    #39426909
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Впрочем, неважно.

kamero, у Вас есть врачи без пациентов. Это нормальная ситуация.

Надо сделать так

Код: c#
1.
2.
3.
DataRelation relation = new DataRelation("MainPatient",
                data.Tables["main"].Columns["idm"],
                data.Tables["patient"].Columns["idm"], false);



=======================
Впрочем, это учебный пример, который только показывает как надо связывать таблицы.
В реальной программе лучше сначала описывать таблицы и связь, а потом заполнять таблицы.

Пример - во вложении. Что бы он работал надо установить учебную базу NorthWind
...
Рейтинг: 0 / 0
Связь таблиц 1 ко многим (MySQL)
    #39427169
kamero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,
Код: sql
1.
2.
3.
4.
5.
6.
7.
                    sqlMain = "select m.idm, w.idh, w.fio as ФИО, p.posts as Должность, s.section as Отделение, w.data_r as \"Дата рождения\", w.phone as Телефон from main m" +
                                 " inner join section s on s.ids=m.ids" +
                                 " inner join workers w on w.idw=m.idw" +
                                 " inner join posts p on p.idp=m.idp" +
                                 " where w.idh = @idh";[color=red] // Вот тут задаю условие[/color]
                    sqlPacient = "Select idp, idm, fio as ФИО, adres as Адрес, data_r as \"Дата рождения\", data_p as \"Дата прихода\"," +
                                 "data_v as \"Дата выписки\", simptom as Симптомы, diagnoz as Диагноз, lec as \"Назначенное лечение\"  from patient";



Нет я о том что как бы без условий выборки все работает(всех врачей и связи с пациентами выгружает), но допустим я хочу чтобы каждый врач мог видеть только своих пациентов, и я задаю условие Where w.idh = 3 допустим. Я проверял в своих проектах на делфи все работает, этот же запрос в самом MySQL проверил, то же работает. А тут он пишет что мол нельзя так.
...
Рейтинг: 0 / 0
Связь таблиц 1 ко многим (MySQL)
    #39427271
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
kamero
Код: sql
1.
2.
sqlPacient = "Select idp, idm, fio as ФИО, adres as Адрес, data_r as \"Дата рождения\", data_p as \"Дата прихода\"," +
                                 "data_v as \"Дата выписки\", simptom as Симптомы, diagnoz as Диагноз, lec as \"Назначенное лечение\"  from patient";


Здесь тоже надо делать выборку для одного врача
...
Рейтинг: 0 / 0
Связь таблиц 1 ко многим (MySQL)
    #39427554
kamero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Впрочем, неважно.

kamero, у Вас есть врачи без пациентов. Это нормальная ситуация.

Надо сделать так

Код: c#
1.
2.
3.
DataRelation relation = new DataRelation("MainPatient",
                data.Tables["main"].Columns["idm"],
                data.Tables["patient"].Columns["idm"], false);



=======================
Впрочем, это учебный пример, который только показывает как надо связывать таблицы.
В реальной программе лучше сначала описывать таблицы и связь, а потом заполнять таблицы.

Пример - во вложении. Что бы он работал надо установить учебную базу NorthWind

Вариант с false подошел) Спасибо
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Связь таблиц 1 ко многим (MySQL)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]