В самостоятельной работе 8 написано: "В пункте "Server name" задаем имя сервера, которое необходимо узнать у преподавателя". Где узнать это имя? |
Манипулирование строками соединений с источником данных
Цель работы: Освоить технологию создания соединения приложения с источником данных, используя конфигурационный файл.
Общие сведения
Для получения доступа к базе данных необходимо задать параметры соединения. Строка соединения хранится в конфигурационном файле app.config. Для разработанного приложения конфигурационный файл имеет следующий вид:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> </configSections> <connectionStrings> <add name="Employee" connectionString="Data Source=MYHOME-8834E210;Initial Catalog=Employee;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
В строке соединения ( connectionStrings ) задается имя соединения ( name ), в нашем случае - "Employee", собственно строка соединения ( connectionString ), в нашем случае - "Data Source=MYHOME-8834E210;Initial Catalog=Employee;Integrated Security=True" и поставщик для клиента базы данных ( providerName ), в нашем случае - "System.Data.SqlClient".
В строке соединения используются следующие параметры:
- Data Source - имя сервера базы данных, с которым устанавливается соединение;
- Initial Catalog - имя (экземпляр) базы данных, с которым устанавливается соединение;
- Integrated Security - параметр, определяющий режим аутентификации ( true - соответствует Windows Aunthentication ) для установления соединения с базой данных.
При разработке приложения в процессе создания класса DataSet строка соединения была автоматически сгенерирована в коде класса DataSetEmployee. Такой способ задания соединения с базой данных является целесообразным на этапах разработки и тестирования функциональности приложения. При развертывании приложении у заказчика такой способ хранения строки соединения с базой данных является неэффективным, так как требует перекомпиляции приложения. Более целесообразным является программное считывание информации о параметрах соединения с базой данных из конфигурационного файла.
Манипулирование строками соединений
Для задания строки соединения создадим метод GetDatabaseConnection, который возвращает экземпляр класса SqlConnection.
private SqlConnection GetDatabaseConnection(string name) { SqlConnection conn = null; ConnectionStringSettings setting = ConfigurationManager.ConnectionStrings[name]; if (setting != null) try { conn = new SqlConnection(setting.ConnectionString); /// Проверка соединения с сервером базы данных conn.Open(); conn.Close(); } catch (SqlException ex) { MessageBox.Show("Прерывание при соединении с базой данных:\n\n Проверьте строку соединения в конфигурационном файле", "Предупреждение!", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); conn = null; } else { MessageBox.Show("Отсутствует соединение с базой данных \n\n Проверьте имя строки соединения в конфигурационном файле", "Предупреждение!", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); } return conn; }
В данном коде используются классы ConnectionStringSettings и ConfigurationManager из пространства имен System.Configuration. Данное пространство имен необходимо подключить к проекту. Для этого в главном меню выберите пункт Project / Add Reference (рисунок 14.1) или в окне Solution Explorer щелкните правой кнопкой мыши на пункте Reference (рисунок 14.2).
В окне Add Reference выберите пространство имен System.Configuration и, нажав кнопку OK, добавьте ссылку в проекте на него (рисунок 14.3).
Кроме того, необходимо в файле FormEmployee.cs добавить спецификацию пространства имен System.Configuration (рисунок 14.4).
В методе GetDatabaseConnection вначале объявляется экземпляр conn класса SqlConnection. Далее читается раздел именованной строки соединения (с этой целью используется класс ConnectionStringSettings ) из конфигурационного файла. Экземпляру setting присваивается значение строки соединения с помощью свойства ConnectionStrings статического класса ConfigurationManager.
Для корректной работы приложения необходимо проверить правильность полученной информации из конфигурационного файла. При проверке сначала анализируется сформирована ли какая-нибудь строка соединения if (setting != null), а затем - корректность сформированной строки
try { conn = new SqlConnection(setting.ConnectionString); conn.Open(); conn.Close();} catch (SqlException ex) { MessageBox.Show("Прерывание при соединении с базой данных:\n\n Проверьте строку соединения в конфигурационном файле", "Предупреждение!", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); conn = null;}
После добавления в код класса FormEmployee метода GetDatabaseConnection необходимо провести модификацию приложения. Во-первых, в коде класса FormEmployee необходимо объявить экземпляр conn класса SqlConnection. Во-вторых, требуется модификация конструктора класса.
public FormEmployee() { InitializeComponent(); bmEmployee = this.BindingContext[dsEmployee, "Employee"]; bmEmployee.PositionChanged +=new EventHandler(BindingManagerBase_PositionChanged); conn = GetDatabaseConnection("Employee"); if (conn == null) { Application.Exit(); } else { daEmployee.Connection = conn; daJobTitle.Connection = conn; } }
В приведенном коде добавленные строки выделены. Модификация конструктора класса FormEmployee приводит к тому, что экземпляр соединения с базой данных conn задается с помощью метода GetDatabaseConnection. Затем полученное соединение передается свойству Connection адаптеров daEmployee и daJobTitle. Если экземпляр соединения с базой данных conn не сформирован, то работа приложения завершается.
При выполнении приложения, если не найдена в конфигурационном файле именованная строка соединения, то выдается предупреждение, приведенное на рисунке 14.5, а в случае неправильной строки соединения выдается предупреждение, приведенное на рисунке 14.6.
Задание на лабораторную работу
- Изучить теоретический материал.
- Модифицируйте приложение для обеспечения программой настройки соединения с базой данных.
- Протестируйте работу приложения и продемонстрируйте возможности манипулирования строкой соединения приложения, заданной в конфигурационном файле, преподавателю.