Взаимодействие С# с базами данных.
Задача.Создать проект для работы с базой данных «Поликлиника». В базу данных поликлиника входят 3 таблицы: врачи (№врача,ФИО, телефон, специальность, кабинет), пациенты(№пациента, ФИО, телефон, №диагноза, №лечащего врача, развитие болезни), диагнозы(№диагноза, название, специализация, литература). Необходимо дать возможность создания отчета, выводящего ФИО пациентов, прикрепленных к ним врачей и развитие болезни. Также выводить отчет, содержащего ФИО пациента, диагноз и ФИО лечащего врача.
Реализация.Реализовывать проект будем на форме.
- Создайте файл нового проекта – Форма Windows и сохраните его под именем hospital
- Добавьте к проекту базу данных, выполнив команду меню Data->Add New Data Source.
- Откроется окно Мастера добавления базы данных (рис.1). В нем выберите DataBase и нажмите кнопку Next.
Рис.1
- На следующем шаге мастера нажмите на кнопку New Connection. Откроется окно нового подключения к базе данных (рис.2).
Рис.2
- В разделе Connection properties в поле Database введите имя базы данных hospital и нажмите кнопку Create. Откроется окно создания новой базы данных (рис.3).
Рис.3
- Если есть желание запаролить вход в базу данных, то внесите пароль в соответствующие поля окна.
- Нажмите ОК. Если Вы не вводили пароля, то появится окно с запросом от подтверждении Вашего желания созадать БД без пароля. Нажмите в нем Yes.
- Вы снова вернетесь в окно добавления базы данных (рис.2), но в нем уже будет внесено расширение файла базы данных .sdf
- Проверьте соединение, нажав на кнопку Test connection. Должно появиться сообщение об успешном соединении (рис. 4). Если оно не появилось, то создайте соединение снова.
Рис.4
- Нажмите кнопку ОК в окне Add connection
- Вы вернетесь в окно мастера создания соединения (рис.1).
- Нажмите на кнопку Next, может появится сообщение о невозможности создания базы данных (рис.5).Это связано с тем, что путь к файлу базы данных указан неверно.
Рис.5
- Нажмите ОК. В окне мастера подключений, нажмите на кнопку New connection и в разделе connection properties нажмите на кнопку create и в появившемся окне создания БД(рис.3) нажмите на кнопку Browse. В верхней строке окна появится путь. Куда нужно сохранить файл БД, в конце строки введите имя БД и нажмит е ОК.
- Вы вернетесь в окна добавления БД(рис.2), но в строке с именем БД будет указан весь путь к файлу.Нажмите ОК.
- Откроется окно мастера добавления соединений. В нем нажмите на кнопку Next. Появится сообщение о переносе файлов БД в проект VS(рис.6). Нажмите Да.
Рис.6
- Нажмите кнопку Next в окне мастера БД и дойдите до завершения работы мастера.
- После завершения работы мастера в Solution Explorer появится файл БД hospital.sdf. Дважды щелкните по нему.Откроется окно Server Explorer с содержимым сервера БД (рис.7)
Рис.7
- Возле имени самой БД есть черная ленточка, это означает, что соединение с ней активно. В папку БД входят папки таблиц и репликаций БД.
- Щелкните правой кнопкой мыши по папке с таблицами БД. В появившемся контекстном меню выберите пункт Create table. Откроется окно создания таблицы (рис.8).
Рис.8
- Внесите имя таблицы и названия столбцов таблицы. Отметьте выделенные жирным шрифтом в задании поля таблиц как первичные ключи. Задайте корректные типы данных для каждого поля таблицы. После создания таблицы нажмите кнопку ОК.
- Создайте 3 таблицы.
- Теперь необходимо связать все таблицы. У нас к таблицы пациенты привязываются таблицы врачи и диагнозы. Выберите ее из списка таблиц в проводнике сервера БД и щелкните на ней правой кнопкой мыши. В контекстном меню выберите пункт Table properties. Появится окно свойств таблицы, в нем выберите пункт Add relations (рис.9)
- В поле relation name внесите имя связи.
- В поле Primary Key Table выберите таблицу, которую привязываем к таблице пациенты.
- В поле Foreign Key Table Column выберите поле к которому мы привязываем внешнюю таблицу(например таблицу врачи к таблице пациенты привязываем по полю №врача).
- Нажмите кнопку Add Columns. Станет активна кнопка Add relation
- Нажмите на кнопку Add Relation. Связь добавться, о чем Вам сообщит появившееся окно.
- Когда добавите все связи ажмите кнопку ОК и окно закроется. Мы связали таблицы.Проверить связи таблицы можно зайдя в раздел Manage Relations
- Теперь нужно их заполнить.
- Для заполнения таблицы выберите из контекстного меню пункт Show table data. Откроется вкладка с содержимым выбранной таблицы(рис.10).
Рис.9
Рис.10
- Заполните все таблицы.
- Работу с самой БД мы закончилди. Теперь нужно создать контейнер для выводя заданным запросов.Но прежде чем создавать контейнер для вывода данных, нужно сформировать требуемый запрос к БД.
- Хапрос к БД сформируем с помощью мастера. Для этого дважды щелкните в проводнике проекта на файле hospitalDataSet.xsd. Откроется закладка мастера создания запросов к БД.
- Для работы с запросами к БД используется класс TableAdapter. В него помещаем запрос к БД. Для его добавления в окно мастера, вызовите контекстное меню и в нем пункт Add-> TableAdapter. Появится окно мастера подключения к БД (рис.11).
- Нажимайте кнопку Next до шага, где будет необходимо создать сам запрос (рис.12).
- В нем нажмите на кнопку Query Builder. Откроется окно мастера создания запросов (рис.13). С окном сверху для добавления таблиц БД. Добавьте из него все таблицы БД и нажмите на кнопку Close.
Рис.11
Рис.12
Рис.13
- В верхнем поле, где размещены таблицы, отметьте те поля, которые нам нужно вывести по запросу – ФИО врач, ФИО пациента, диагноз.Проверьте выполнение запроса. Нажав на кнопку Execute Query. Внизу окна должна появится таблица с результатами запроса. Нажмите ОК.
- Вы вернетесь в окно мастера. Пройдите до конца все шаги мастера. После завершения работы мастера в на закладке появится окно TableAdapter с созданным запросом внизу окна.Теперь его нужно связать с формой для вывода его данных на нее. Для этого нужно создать контейнер.
- Контейнером для вывода данным из таблиц служит инструмент формы DataGridView. Поместите его на форму (он находится в разделе Data).
- После его размещения на форму появляется окно, в котором нужно указать источник данных для этого контейнера (рис.14)
Рис.14
- В поле Choose Data Source нажмите на стрелочку. Появится список созданных подключений, откройте папку подключения, в ней папку БД, в ней найдите файл только что созданного адаптера.
- Содержимое адаптера отразится на форме (рис.15). Обратите внимание, что внизу формы добавились еще три значка. Первый – hospitalDataSet устанавливает связь с БД, второй – dataTable1BindingSource устанавливает связи с другими таблицами, третий – dataTable1TableAdapter выполняет запрос к БД.
рис.15
- Запустите программу на выполнение. На форме отразится содержание запроса (рис.16).
Рис.16
- Серьезным недостатком его является неочевидность названия содержания столбцов. Нужно это исправить. Закройте форму и вернитесь в проект.
- Вызовите контекстное меню элемента DataGridView, а в нем пункт Edit Columns. Откроется окно редактирования колонок формы вывода (рис.17).
- Выберите колонку ФИО(в ней должно размещатся ФИО врача) и в его свойстве HeaderText введите новое название для нее – врач.
- Аналогичным образом поменяйте название для колонки ФИО пациента на пациент.
Рис.17
- Колонка с названием диагноз должна называться диагноз. Поменяйте порядолк колонок, используя стрелочки рядом со списком колонок. Доджно быть – пациент, диагноз, врач.
- Нажмите ОК. Сохраните проект и запустите его. Теперь мы получили адекватное отражение запрошенной из БД информации (рис.18)
Рис.18
Самостоятельно.Добавьте на форму второй запрос из задания.