Лекция № 4
Тема: "Подключение к СУБД SQL Server и MySQL"
План
1. Подключение клиент/серверных СУБД в Visual Studio
2. Подключение к СУБД SQL Server
3. Подключение к СУБД MySQL
1. Подключение к СУБД SQL Server
Бесплатная версия Visual Studio Express Edition позволяет подключить к проекту только локальные версии БД. В таких версиях БД представляет из себя один файл на диске.
Список поддерживаемых локальных СУБД отображается при создании подключения к БД.

В данном окне отображается СУБД SQL Server, и может возникнуть ошибочное мнение, что это и есть клиент/серверная версия. На самом деле мы видим название "Файл базы данных SQL Server", то есть мы подключаемся не к серверу, а указываем путь к фалу БД, как для локальных СУБД.
Если файл БД находится на одном компьютере с использующей ее программой (чаще всего в одной папке, но не обязательно), то такая программа работает как локальная версия.
Если файл БД находится в некотором общем сетевом хранилище, то программа, использующая такую БД, работает по принципу файл серверной технологии.
В любом случае такие БД отличаются низкой степенью защиты, высокой нагрузкой на сетевой трафик при большом числе пользователей системы, невозможностью поддержания данных в БД в актуальном состоянии в режиме реального времени.
Решение всех этих проблем является использование в качестве хранилища данных клиент/серверных СУБД.
Для работы с такими СУБД необходимо использовать профессиональную версию Visual Studio Professional. В этой версии при выборе источника данных появляются новые элементы:
- Microsoft SQL Server:
- База данных Oracle;
- Источник данных ODBC;
- MySQL Database.
Если первые два элемента позволяют подключиться к стандартным промышленным клиент/серверным СУБД, то "Источник данных ODBC" позволяет подключить практическую любую СУБД, для которой установлен специальный ODBC драйвер. Элемент "MySQL Database" по умолчанию отсутствует в данном окне. Для его добавления необходимо будет установить на машину разработчика "MySQL for Visual Studio" (см. лекцию ниже).

2. Подключение к СУБД SQL Server
Если при создании подключения Вы выбрали источник данных "Microsoft SQL Server", то отобразиться окна задания параметров подключения БД.

Необходимо указать имя сервера, где установлена СУБД, имя пользователя и пароль учетной (что не вводить пароль при отладке программы включите флажок "Сохранить пароль"). Если регистрационный данные были введены верно, то в выпадающем списке отобразится список всех БД на сервере. Выберите нужную и щелкните ОК.
Вы вернетесь в окна мастера настройки соединения. Первое, что нужно сделать, это с помощью переключателей указать, нужно ли исключить или включить конфиденциальные данные в строку подключения. Речь идет о добавлении пароля в строку подключения. Если это сделать, то посторонний человек сможет узнать пароль доступа, так как он будет храниться в виде обычного текста в строке подключения. На рисунке видно, что переключатель исключает добавление пароля и в строке подключения пароль не отображается. Но при этом Вам придется создавать в приложении форму регистрации и подставлять введенный пользователем пароль в строку подключения программно.

Если же включить пароль в строку подключения, то пароль будет вставлен в виде текста и строка подключения будет иметь вид, показанный на рисунке.

Выберите подходящий способ и переходите на следующий шаг мастера.
Вы перейдете на форму "Сохранение подключения в файле конфигурации приложения". На этом шаге с помощью включенного флажка Вы можете сохранить строку подключения в конфигурационный файл app.config как параметр приложения. Такой подход не является хорошим, так как данный параметр будет находиться в файле в виде обычного текста. А после компиляции приложения в файле user.config.
Если флажок снять, то строка подключения будет помещена в код формы и при компиляции нигде в иде мтроки отображаться не будет. С точки зрения безопасности - это более предпочтительный метод.

Далее необходимо выбрать таблицы из БД для подключения и щелкнуть Готово.
Дальнейшая работа с БД выполняется теми же способами, что и при СУБД Access, рассмотренными на лекциях и практических занятиях.
Создание формы регистрации
При работе с клиент/серверными СУБД пользователь должен проходить процедуру идентификации: ввода логина и пароль. При настройке строки подключения мы указали некоторые данные, но это данные разработчика, а для пользователя может быть создана отдельная учетная запись, которую он и должен использовать. Поэтому добавим в проект новую форму вида:

Для понимания кода в полях отображаются их имена. Для поля textBox2 укажите свойство PasswordChar=*. Для кнопки ОК укажите свойство DialogResult=OK. Для кнопки отмена укажите свойство DialogResult=Cancel.
Для сохранения введенных параметров идентификации и передачи их на форму с подключенными таблицами опишем в проекте глобальные переменные. Для этого откройте файл Program.cs и в начале класса опишите переменные:
public static string user, password, server, port;
На форме идентификации напишем код для кнопок.
Кнопка ОК будет иметь код:
private void button1_Click(object sender, EventArgs e)
{
//сохраняем в глобальные переменные значения полей
Program.user = textBox1.Text;
Program.password = textBox2.Text;
Program.server = textBox3.Text;
Program.port = textBox4.Text;
//закрываем форму идентификации
Close();
}
Кнопка Отмена будет иметь код:
private void button2_Click(object sender, EventArgs e)
{
//закрываем форму идентификации
Close();
}
При открытии формы с таблицами БД нужно подставить в строку подключения параметры идентификации.Вначале скопируем текст строки подключения к БД в буфер обмена. Для этого на панели "Источники данных" щелкните на кнопке "Настроить источник данных с помощью мастера".

В результате откроется мастер настройки подключения. С помощью кнопки Назад перейдите на шаг задания строки подключения и скопируйте ее текст.
Перейдите на форму с таблицами БД. В ее событии Load будет отображаться код заполнения компонента TableAdapter данными из таблицы. Например, что-то такого вида:
this.tovarTableAdapter.Fill(this.catalogDataSet.tovar);
Если используется несколько таблиц, то такая команда будет для каждой таблицы.
Необходимо в код события внести изменения. Обратите внимание, что при присваивании строки подключения свойству ConnectionString мы заменили все идентификационные данные значениями глобальных переменных и в конце добавили параметр password.
private void Form1_Load(object sender, EventArgs e)
{
//пробуем выполнить подключение
try
{
//задаем строку подключения с введенными параметарми
tableAdapterManager.Connection.ConnectionString = "Data Source=" + Program.server + "," + Program.port + ";Initial Catalog=catalog;Persist Security Info=True;User ID=" + Program.user + ";password=" + Program.password;
//здесь размещаем все методы Fill(), которые были введены в событии ранее
this.tovarTableAdapter.Fill(this.catalogDataSet.tovar);
}
//если подключение не удалось
catch (Exception ex)
{
//сообщение об ошибке
MessageBox.Show("Неверные идентификационные данные", "Ошибка входа", MessageBoxButtons.OK, MessageBoxIcon.Error);
//закрываем форму
Close();
}
}
Форма регистрации должна появляться перед запуском основной формы. Откройте файл Program.cs. Перед командой Application.Run(...) введите код:
//создаем экземпляр формы регистрации
Form2 form2 = new Form2();
//отображаем форму в модальном режиме
form2.ShowDialog();
//если форма закрылась и не вернула нам DialogResult=OK
//(кнопка ОК имеет свойство DialogResult=OK,
//то есть окно закрыли или по кнопке Отмена,
//или обычным способом (кнопка в заголовке окна или Alt+F4))
if (form2.DialogResult != DialogResult.OK)
//завершаем работу приложения
Environment.Exit(0);
Сохранение регистрационных данных
После успешной регистрации можно сохранить эти данные, кроме пароля, для последующего отображения на форме. Пользователю не нужно будет вводить все данные заново. Он введет только пароль.
Сохранять параметры можно в INI файл, в реестр или в параметры приложения. Рассмотрим сохранение данных в параметры приложения.
Откройте в проекте файл Properties\Settings.settings и создайте в нем три параметра как показано на рисунке.

Привяжем созданные параметры в полям формы регистрации. Выделите поля для логина, откройте свойство ApplicationSettings, затем свойство PropertyBinding и в окне справа от свойства Text выберите в списке параметрuser. Аналогично привяжите поля для ввода имени сервера и номера порта.
Если подключение с указанными данными выполнено успешно, то нужно эти данные сохранить в параметры. Для этого в событии Load формы с таблицами БД в разделе Try {}, в котором мы настраивали строку соединения добавьте в команду:
Properties.Settings.Default.Save();
Замечание: использование параметров приложения имеет недостаток. При перемещении исполняемого файла в новую папку все настройки сбрасываются. Если Вы хотите, чтобы программа не зависила от изменения ее положения, сохраняйте параметры в INI файл или реестр (см. практическое занятие № 7)
3. Подключение к СУБД MySQL
Поддержка СУБД MySQL в среде Visual Studio Professional отсутствует. На официальном сайте данной СУБД можно скачать "MySQL for Visual Studio" и установить его на машину разработчика. В результате при настройке подключения к БД в окне выбора источников данных появится строка "MySQL Database" как показано на втором рисунке вверху лекции.
При выборе этого источника данных появится окна для задания параметров подключения к БД на сервере.

Укажите имя сервера, логин и пароль пользователя. Если параметры заданы верно, то в выпадающем списке отобразится список БД. Выберите нужную. По кнопе "Дополнительно" можно задать дополнительные параметры подключение, в том числе и номер порта (по умолчанию 3306).
Дальнейшие действия полностью совпадают с принципом подключения БД SQL Server.
Отличие заключается в том, что в событии Load формы с таблицами БД при задании строки подключения ее вид будет иным:
tableAdapterManager.Connection.ConnectionString = "server=" + Program.server + ";Port=" + Program.port + ";User ID=" + Program.user + ";Persist Security Info=True;database=catalog;password=" + Program.password;
Вопросы для самопроверки
1. Как настроить подключение к БД SQL Server с помощью стандартного мастера?
2. Как добавить поддержку MySQL в Visual Studio и настроить подключение к БД с помощью стандартного мастера?