C#. ADO .NET. Присоединенный режим (connected mode). Класс DbConnection

Присоединенный режим (connected mode). Класс DbConnection

Перед изучением данной темы рекомендуется ознакомиться с темой:


Поиск на других ресурсах:

Содержание


1. Класс DbConnection. Общие сведения

Класс DBConnection используется для подключения к базе данных из приложения в подключенном режиме (connected mode). Понятие «соединенный режим» означает, что все операции с базой данных (чтение, вставка, обновление, удаление) выполняются в момент, когда база данных подключена (открыта). Для открытия соединения с базой данных используется метод Open() класса. Для закрытия соединения используется метод Close().

Класс DbConnection реализует интерфейс IDbConnection. Более подробно об особенностях реализации интрефейса IDbConnection можно прочитать здесь.

Чтобы использовать IDbConnection и производные от него классы, нужно подключить пространство имен System.Data.Common

using System.Data.Common;

Класс DBConnection является базовым для всех других классов подключений SqlConnection, OdbcConnection, OledbConnection.

С помощью объекта типа DbConnection можно задавать:

  • тип источника данных;
  • размещение источника данных;
  • различные атрибуты источника данных.

Объект типа DbConnection используется для подключения к базе данных и отключения от нее.

 

2. Анализ методов и свойств класса DbConnection

Кроме двух вышеупомянутых методов Close() и Open() класс DbConnection имеет ряд других свойств и методов.

В следующей таблице отображаются свойства класса SqlConnection.

Свойство Тип данных Описание
ConnectionString String Определяет способ подключения объекта SqlConnection к источнику
ConnectionTimeOut Int32 Задает интервал времени в секундах, в течение которого объект SqlConnection пытается установить соединение с источником данных (доступно только для чтения)
Database String Определяет имя базы данных, к которой произошло подключение
DataSource String Возвращает информацию о размещении базы данных к которой происходит или произошло подключение (доступно только для чтения)
PacketSize Int32 Размер пакета, используемый для обмена информацией с базой данных SQL Server (только для чтения)
ServerVersion String Версия источника данных (только для чтения)
State ConnectionState Указывает текущее состояние объекта SqlConnection – активное или уничтоженное (доступно только для чтения)
WorkstationId String Возвращает имя клиента БД. По умолчанию равно имени компьютера

Методы объекта SqlConnection представлены в следующей таблице.

Метод Описание
BeginTransaction Начинает транзакцию для соединения
ChangeDatabase При открытом соединении переключается на указанную БД
ClearAllPools Очистка свободных соединений во всех пулах SqlConnection. Это статический метод
ClearPool Очищает свободные соединения в пуле соединений с соответствующим объектом типа SqlConnection. Это статический метод
Close Закрывает соединение
CreateCommand Создает объект типа SqlCommand для текущего соединения
GetSchema Получает информацию о схеме для соединения
Open Открывает соединение
ResetStatistics Сбрасывает статистику для текущего соединения
RetrieveStatistics Возвращает статистику для текущего соединения

 

3. Создание, открытие и закрытие соединения. Фрагмент

В наиболее общем случае процедура использования соединения с базой данных состоит из следующих шагов.

1. Создание соединения (подключения)

SqlConnection connection = new SqlConnection(connStr);

здесь connStr – строка соединения с базой данных (Connection String).

2. Открытие соединения

connection.Open();

После открытия соединения с базой данных можно вносить изменения в эту базу данных.

3. Закрытие соединения

connection.Close();

После закрытия соединение с базой данных остается в так называемом «пуле соединений» до следующего обращения.

 

4. Примеры соединения с источником данных

В примерах ниже показаны различные способы изменения данных и их чтения в подключенном режиме. Источником данных является Sql Server. Рассматриваются фрагменты кода для приложения типа Windows Forms, в частности, обработчики событий клика на кнопке Button.

4.1. Установление подключения. Методы Open() и Close()

Установить подключение и получить информацию об особенностях источника данных можно приблизительно следующим образом.

// Метод, который создает SQL-соединение с базой данных
private void CreateSQLConnection()
{
  // Create SQL Connection
  // 1. Строка соединения с базой данных
  string connStr = @"Data Source=(localdb)\ProjectModels;" +
    "Initial Catalog=Database4;Integrated Security=True;" +
    "Connect Timeout=30;Encrypt=False;" +
    "TrustServerCertificate=False;ApplicationIntent=ReadWrite;" +
    "MultiSubnetFailover=False";

  // 2. Создать подключение на основе строки соединения
  using (SqlConnection connection =
    new SqlConnection(connStr))
  {
    try
    {
      // Открыть подключение
      connection.Open();
      label1.Text = "Connection is open. ";
      label2.Text = "Database: " + connection.Database;
      label3.Text = "DataSource: " + connection.DataSource;
    }
    catch(SqlException e)
    {
      label1.Text = e.Message;
    }
    finally
    {
      // Закрыть подключение
      connection.Close();
      label1.Text = label1.Text + "Connection is closed...";
    }
  }
}

Принцип работы следующий:

  • открыть соединение с базой данных;
  • выполнить операции над базой данных;
  • закрыть соединение.

 

4.2. Прочитать данные из базы данных

Нижеследующий фрагмент демонстрирует чтение данных из таблицы Table1 базы данных с именем Database4 на основе:

  • строки queryStr запроса на языке SQL (T-SQL);
  • строки соединения с базой данных (Connection String).
private void GetDataFromDataBase()
{
  // Читает строки из базы данных
  // 1. Строка запроса
  string queryStr = "SELECT * FROM [dbo].[Table1]";

  // 2. Строка подключения
  string connStr = @"Data Source=(localdb)\ProjectModels;" +
      "Initial Catalog=Database4;Integrated Security=True;";

  // 3. Получить данные
  using (SqlConnection connection =
    new SqlConnection(connStr))
  {
    try
    {
      // создать команду на языке SQL
      DbCommand command = connection.CreateCommand();
      command.CommandText = queryStr;
      command.CommandType = CommandType.Text;

      // Открыть соединение
      connection.Open();

      // Получить данные - класс DDataReader
      DbDataReader dataReader = command.ExecuteReader();

      // Вывести данные в listBox1
      listBox1.Items.Clear();
      while (dataReader.Read())
      {
        listBox1.Items.Add(dataReader[0].ToString() + " - " +
          dataReader[1].ToString());
      }
    }
    catch (Exception e)
    {
      MessageBox.Show(e.Message);
    }
    finally
    {
      // Закрыть соединение
      connection.Close();
    }
  }
}

 

4.3. Получить информацию о соединении

Для получения информации о соединении можно использовать приблизительно следующий код. В противном случае можно изменить только строку соединения с базой данных connStr.

// Получить информацию о соединении
private void GetInformationAboutConnection()
{
  // 1. Сформировать строку подключения
  string connStr = @"Data Source=(localdb)\ProjectModels;" +
      "Initial Catalog=Database4;Integrated Security=True;";

  // 2. Получить информацию
  using (SqlConnection connection =
    new SqlConnection(connStr))
  {
    try
    {
      // Открыть подключение
      connection.Open();

      listBox1.Items.Add("Connection is open...");
      listBox1.Items.Add("Database: " + connection.Database);
      listBox1.Items.Add("DataSource: " + connection.DataSource);
      listBox1.Items.Add("State: " + connection.State.ToString());
      listBox1.Items.Add("Server Version: " + connection.ServerVersion);
      listBox1.Items.Add("Access Token: " + connection.AccessToken);
    }
    catch (SqlException e)
    {
      MessageBox.Show(e.Message);
    }
    finally
    {
      // Закрыть подключение
      connection.Close();
      label1.Text = "Connection is closed...";
    }
  }
}

 

5. Пример определения провайдера и доступа к источнику данных

Пример обработчика события для приложения типа Windows Forms, в котором выбирается подключение и устанавливается соответствующее соединение в подключенном режиме (connected mode).

// Пример определения провайдера с целью доступа к источнику данных
private void button5_Click(object sender, EventArgs e)
{
  // Ссылка на соединение
  IDbConnection conn = null;

  // Получить выделенный элемент
  int index = comboBox1.SelectedIndex;

  // Получить имя провайдера
  string provider = comboBox1.Text;

  // Создать соединение
  if (provider == "SqlServer")
  {
    conn = new SqlConnection();
  }
  else
  if (provider == "OleDb")
  {
    conn = new OleDbConnection();
  }
  else
  if (provider == "Odbc")
  {
    conn = new OdbcConnection();
  }

  if (provider == "None")
  {
    return;
  }

  string info = conn.GetType().Name;
  listBox1.Items.Clear();
  listBox1.Items.Add(info);
}

 


Связанные темы