Приєднаний режим (connected mode). Клас DbConnection
Перед вивченням даної теми рекомендується ознайомитись з темою:
Пошук на інших ресурсах:
Зміст
- 1. Клас DbConnection. Загальні відомості
- 2. Аналіз методів та властивостей класу DbConnection
- 3. Створення, відкриття і закриття з’єднання. Фрагмент
- 4. Приклади з’єднання з джерелом даних
- 5. Приклад визначення провайдера та доступу до джерела даних
- Споріднені теми
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); }
⇑
Споріднені теми
- Вступ в ADO .NET. Постачальники даних (провайдери). Простори імен ADO .NET
- Простори імен ADO .NET. Огляд. Інтерфейси ADO .NET
⇑