Опубликован: 09.09.2008 | Доступ: свободный | Студентов: 2107 / 346 | Оценка: 4.30 / 4.12 | Длительность: 08:30:00
ISBN: 978-5-94774-601-3
Самостоятельная работа 14:

Манипулирование строками соединений с источником данных

Цель работы: Освоить технологию создания соединения приложения с источником данных, используя конфигурационный файл.

Общие сведения

Для получения доступа к базе данных необходимо задать параметры соединения. Строка соединения хранится в конфигурационном файле 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).

Выбор режима добавления ссылки на новое пространство имен из главного меню

Рис. 14.1. Выбор режима добавления ссылки на новое пространство имен из главного меню
Выбор режима добавления ссылки на новое пространство имен из контекстного меню

Рис. 14.2. Выбор режима добавления ссылки на новое пространство имен из контекстного меню

В окне Add Reference выберите пространство имен System.Configuration и, нажав кнопку OK, добавьте ссылку в проекте на него (рисунок 14.3).

Окно Add Reference  добавления ссылок в проект

Рис. 14.3. Окно Add Reference добавления ссылок в проект

Кроме того, необходимо в файле FormEmployee.cs добавить спецификацию пространства имен System.Configuration (рисунок 14.4).

Спецификация пространства имен System.Configuration в файле FormEmployee.cs

Рис. 14.4. Спецификация пространства имен System.Configuration в файле FormEmployee.cs

В методе 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.

Предупреждение об отсутствии именованная строка соединения

Рис. 14.5. Предупреждение об отсутствии именованная строка соединения
Предупреждение об ошибке в строке соединения

Рис. 14.6. Предупреждение об ошибке в строке соединения

Задание на лабораторную работу

  1. Изучить теоретический материал.
  2. Модифицируйте приложение для обеспечения программой настройки соединения с базой данных.
  3. Протестируйте работу приложения и продемонстрируйте возможности манипулирования строкой соединения приложения, заданной в конфигурационном файле, преподавателю.
Анна Иваненко
Анна Иваненко

В самостоятельной работе 8 написано: "В пункте "Server name" задаем имя сервера, которое необходимо узнать у преподавателя". Где узнать это имя?

Вячеслав Шестивский
Вячеслав Шестивский

Вроде всё выставил верно, но при клике на "Сотрудники", меню из FormEmplyee не вставляется в меню главного окна а висит в дочернем окне снизу.  Как поправить?