Взаимодействие С# с базами данных.

Задача.Создать проект для работы с базой данных «Поликлиника». В базу данных поликлиника входят 3 таблицы: врачи (№врача,ФИО, телефон, специальность, кабинет), пациенты(№пациента, ФИО, телефон, №диагноза, №лечащего врача, развитие болезни), диагнозы(№диагноза, название, специализация, литература). Необходимо дать возможность создания отчета, выводящего ФИО пациентов, прикрепленных к ним врачей и развитие болезни. Также выводить отчет, содержащего ФИО пациента, диагноз и ФИО лечащего врача.

 

Реализация.Реализовывать проект будем на форме.

  1. Создайте файл нового проекта – Форма Windows и сохраните его под именем hospital
  2. Добавьте к проекту базу данных, выполнив команду меню Data->Add New Data Source.
  3. Откроется окно Мастера добавления базы данных (рис.1). В нем выберите DataBase и нажмите кнопку Next.

 

Рис.1

  1. На следующем шаге мастера нажмите на кнопку New Connection. Откроется окно нового подключения к базе данных (рис.2).

Рис.2

  1. В разделе Connection properties в поле Database введите имя базы данных hospital и нажмите кнопку Create. Откроется окно создания новой базы данных (рис.3).

Рис.3

  1. Если есть желание запаролить вход в базу данных, то внесите пароль в соответствующие поля окна.
  2. Нажмите ОК. Если Вы не вводили пароля, то появится окно с запросом от подтверждении Вашего желания созадать БД без пароля. Нажмите в нем Yes.
  3. Вы снова вернетесь в окно добавления базы данных (рис.2), но в нем уже будет внесено расширение файла базы данных .sdf
  4. Проверьте соединение, нажав на кнопку Test connection. Должно появиться сообщение об успешном соединении (рис. 4). Если оно не появилось, то создайте соединение снова.

Рис.4

  1. Нажмите кнопку ОК в окне Add connection
  2. Вы вернетесь в окно мастера создания соединения (рис.1).
  3. Нажмите на кнопку Next, может появится сообщение о невозможности создания базы данных (рис.5).Это связано с тем, что путь к файлу базы данных указан неверно.

Рис.5

  1. Нажмите ОК. В окне мастера подключений, нажмите на кнопку New connection и в разделе connection properties нажмите на кнопку create и в появившемся окне создания БД(рис.3) нажмите на кнопку Browse. В верхней строке окна появится путь. Куда нужно сохранить файл БД, в конце строки введите имя БД и нажмит е ОК.
  2. Вы вернетесь в окна добавления БД(рис.2), но в строке с именем БД будет указан весь путь к файлу.Нажмите ОК.
  3. Откроется окно мастера добавления соединений. В нем нажмите на кнопку Next. Появится сообщение о переносе файлов БД в проект VS(рис.6). Нажмите Да.

Рис.6

  1. Нажмите кнопку Next в окне мастера БД и дойдите до завершения работы мастера.
  2. После завершения работы мастера в Solution Explorer появится файл БД hospital.sdf. Дважды щелкните по нему.Откроется окно Server Explorer с содержимым сервера БД (рис.7)

Рис.7

  1. Возле имени самой БД есть черная ленточка, это означает, что соединение с ней активно. В папку БД входят папки таблиц и репликаций БД.
  2. Щелкните правой кнопкой мыши по папке с таблицами БД. В появившемся контекстном меню выберите пункт Create table. Откроется окно создания таблицы (рис.8).

Рис.8

  1. Внесите имя таблицы и названия столбцов таблицы. Отметьте выделенные жирным шрифтом в задании поля таблиц как первичные ключи. Задайте корректные типы данных для каждого поля таблицы. После создания таблицы нажмите кнопку ОК.
  2. Создайте 3 таблицы.
  3. Теперь необходимо связать все таблицы. У нас к таблицы пациенты привязываются таблицы врачи и диагнозы. Выберите ее из списка таблиц в проводнике сервера БД и щелкните на ней правой кнопкой мыши. В контекстном меню выберите пункт Table properties. Появится окно свойств таблицы, в нем выберите пункт Add relations (рис.9)
  4. В поле relation name внесите имя связи.
  5. В поле Primary Key Table выберите таблицу, которую привязываем к таблице пациенты.
  6. В поле Foreign Key Table Column выберите поле к которому мы привязываем внешнюю таблицу(например таблицу врачи к таблице пациенты привязываем по полю №врача).
  7. Нажмите кнопку Add Columns. Станет активна кнопка Add relation
  8. Нажмите на кнопку Add Relation. Связь добавться, о чем Вам сообщит появившееся окно.
  9. Когда добавите все связи ажмите кнопку ОК и окно закроется. Мы связали таблицы.Проверить связи таблицы можно зайдя в раздел Manage Relations
  10. Теперь нужно их заполнить.
  11. Для заполнения таблицы выберите из контекстного меню пункт Show table data. Откроется вкладка с содержимым выбранной таблицы(рис.10).

 

Рис.9

Рис.10

  1. Заполните все таблицы.
  2. Работу с самой БД мы закончилди. Теперь нужно создать контейнер для выводя заданным запросов.Но прежде чем создавать контейнер для вывода данных, нужно сформировать требуемый запрос к БД.
  3. Хапрос к БД сформируем с помощью мастера. Для этого дважды щелкните в проводнике проекта на файле hospitalDataSet.xsd. Откроется закладка мастера создания запросов к БД.
  4. Для работы с запросами к БД используется класс TableAdapter. В него помещаем запрос к БД. Для его добавления в окно мастера, вызовите контекстное меню и в нем пункт Add-> TableAdapter. Появится окно мастера подключения к БД (рис.11).
  5. Нажимайте кнопку Next до шага, где будет необходимо создать сам запрос (рис.12).
  6. В нем нажмите на кнопку Query Builder. Откроется окно мастера создания запросов (рис.13). С окном сверху для добавления таблиц БД. Добавьте из него все таблицы БД и нажмите на кнопку Close.

Рис.11

Рис.12

Рис.13

  1. В верхнем поле, где размещены таблицы, отметьте те поля, которые нам нужно вывести по запросу – ФИО врач, ФИО пациента, диагноз.Проверьте выполнение запроса. Нажав на кнопку Execute Query. Внизу окна должна появится таблица с результатами запроса. Нажмите ОК.
  2. Вы вернетесь в окно мастера. Пройдите до конца все шаги мастера. После завершения работы мастера в на закладке появится окно TableAdapter с созданным запросом внизу окна.Теперь его нужно связать с формой для вывода его данных на нее. Для этого нужно создать контейнер.
  3. Контейнером для вывода данным из таблиц служит инструмент формы DataGridView. Поместите его на форму (он находится в разделе Data).
  4. После его размещения на форму появляется окно, в котором нужно указать источник данных для этого контейнера (рис.14)

Рис.14

  1. В поле Choose Data Source нажмите на стрелочку. Появится список созданных подключений, откройте папку подключения, в ней папку БД, в ней найдите файл только что созданного адаптера.
  2. Содержимое адаптера отразится на форме (рис.15). Обратите внимание, что внизу формы добавились еще три значка. Первый – hospitalDataSet устанавливает связь с БД, второй – dataTable1BindingSource устанавливает связи с другими таблицами, третий – dataTable1TableAdapter выполняет запрос к БД.

рис.15

  1. Запустите программу на выполнение. На форме отразится содержание запроса (рис.16).

Рис.16

  1. Серьезным недостатком его является неочевидность названия содержания столбцов. Нужно это исправить. Закройте форму и вернитесь в проект.
  2. Вызовите контекстное меню элемента DataGridView, а в нем пункт Edit Columns. Откроется окно редактирования колонок формы вывода (рис.17).
  3. Выберите колонку ФИО(в ней должно размещатся ФИО врача) и в его свойстве HeaderText введите новое название для нее – врач.
  4. Аналогичным образом поменяйте название для колонки ФИО пациента на пациент.

Рис.17

  1. Колонка с названием диагноз должна называться диагноз. Поменяйте порядолк колонок, используя стрелочки рядом со списком колонок. Доджно быть – пациент, диагноз, врач.
  2. Нажмите ОК. Сохраните проект и запустите его. Теперь мы получили адекватное отражение запрошенной из БД информации (рис.18)

Рис.18

 

Самостоятельно.Добавьте на форму второй запрос из задания.