Клас DbCommand. Приклади використання
Перед вивченням даної теми рекомендується ознайомитись з наступною темою:
Пошук на інших ресурсах:
Зміст
- 1. Мета та задачі класу DbCommand
- 2.Властивості та методи класу DbCommand
- 3. Приклад читання даних з бази даних та додавання цих даних в компонент типу ListBox. Додаток типу Windows Forms
- Споріднені теми
1. Мета та задачі класу DbCommand
Клас DbCommand використовується з метою створення об’єкту який інкапсулює в собі SQL-запит. Сформований в об’єкті SQL-запит може задаватись до існуючого з’єднання з базовю даних в приєднаному режимі (connected mode).
Для створення об’єкту типу DbCommand чи успадкованого з нього типу (SqlCommand, OledbCommand, OdbcCommand) потрібно викликати конструктор SqlCommand(), який отримує 2 параметри:
- об’єкт типу DbConnection – реалізує безпосередньо з’єднання з базою даних;
- рядок на мові SQL, який буде задаватись до об’єкту DbConnection.
⇑
2.Властивості та методи класу DbCommand
2.1. Властивості класу DbCommand (на прикладі класу SqlCommand)
Властивість | Тип даних | Пояснення |
CommandText | string | Містить текст запиту на мові SQL |
CommandTimeOut | Int32 | Час в секундах. Це є час очікування адаптером завершення виконання запиту (за замовчуванням 30 секунд) |
CommandType | CommandType | Тип запиту (за замовчуванням Text). Також є TableDirect та StoredProcedure |
Connection | SqlConnection | З’єднання зі сховищем даних |
Parameters | SqlParameterCollection | Набір параметрів запиту |
Transaction | SqlTransaction | Задає транзакцію, що використовується для запиту |
⇑
2.2. Методи класу DbCommand
Метод | Пояснення |
BeginExecuteNonQuery, BeginExecuteReader, BeginExecuteXmlReader |
Починає асинхронне виконання запиту |
Cancel | Відміняє виконання запиту |
Clone | Повертає копію об’єкту DbCommand (SqlCommand) |
CreateParameter | Створює новий параметр для запиту |
EndExecuteNonQuery, EndExecuteReader, EndExecuteXmlReader |
Завершує асинхронне виконання запиту |
ExecuteNonQuery | Виконує запит на мові SQL, який не повертає записів. |
ExecuteReader | Виконує запит на мові SQL, який повертає записи. Результат вставляється в об’єкт DbDataReader (SqlDataReader). |
Prepare | Зберігає у сховищі даних підготовлену версію запиту |
ResetCommandTimeout | Встановлює у властивості CommandTimeout значення за замовчуванням (30 секунд). |
⇑
2.3. Приклад посилання запиту
У прикладі наведено фрагмент програмного коду, який виводить всі поля таблиці Group, яка складається з двох полів:
- ID_Group – унікальний ідентифікатор групи, первинний ключ;
- NameGroup – ім’я групи.
У фрагменті коду підключення відбувається до провайдера Microsoft SQL Server.
string connString = @"DataSource = .SQLExpress;" + "InitialCatalog = MyDatabase;" + "Integrated Security = True"; string strSQL = "SELECT * FROM [Group]"; SqlConnection conn = new SqlConnection(connString); // Відкрити з'єднання з базою даних conn.Open(); SqlCommand command = new SqlCommand(strSQL, conn); SqlDataReader reader = command.ExecuteReader(); int RowsRetrieved = 0; // Кількість прочитаних рядків // Щоб відмінити запит потрібно викликати command.Cancel(); while (reader.Read()) { listBox1.Items.Add(reader[0].toString() + " - " + reader[1].toString()); RowsRetrieved++; } label2.Text = "Number rows retrieved: " + RowsRetrieved.toString(); // Закрити об'єкт reader reader.Close(); conn.Close();
У вищенаведеному фрагменті з допомогою конструктора SqlCommand() створюється об’єкт, що інкапсулює в собі SQL-команду. Це здійснюєтья з допомогою рядка
SqlCommand command = new SqlCommand(strSQL, conn);
в якому
- strSQL – текст запиту на мові SQL (T-SQL);
- conn – об’єкт типу SqlConnection, який забезпечує підключення до бази даних.
Для отримання результуючого набору рядків на основі запиту command використовується об’єкт reader типу SqlDataReader. Об’єкт reader є колекцією стовпців таблиці, яка формується на основі заданого SQL-запиту. Щоб отримати об’єкт reader з заповненими даними у вигляді таблиці викликається метод ExecuteReader() об’єкту command
SqlDataReader reader = command.ExecuteReader();
На основі запиту, що сформований в об’єкті command формується об’єкт reader. Цей об’єкт є колекцією стовпців вихідної таблиці. Ця таблиця створюється на основі SQL-запиту, сформованого в об’єкті command. Тому, до полів таблиці в об’єкті reader можна звертатись з допомогою операції індексування:
- reader[0] – стовпець таблиці з індексом 0
- reader[1] – стовпець таблиці з індексом 1
Для кожного стовпця (reader[0], reader[1], …) можна виконати приведення до типу цього стовпця і, таким чином, отримати коректне представлення даних у нашій програмі.
В об’єкті reader реалізовано метод Read(), який читає рядки в одному напрямку (з початку до кінця). Якщо рядок може бути прочитаний, то метод Read() повертає true. Тому, при читанні рядків, доцільно поміщати цей метод в цикл while()
while (reader.Read())
{
...
}
З допомогою введення додаткової змінної можна підрахувати кількість рядків в об’єкті reader, що були отримані в результаті запиту command.
⇑
3. Приклад читання даних з бази даних та додавання цих даних в компонент типу ListBox. Додаток типу Windows Forms
У прикладі наводиться обробник події в додатку типу Windows Forms, в якому з бази даних зчитуються дані та записуються для відтворення у компоненті ListBox.
Для того, щоб отримати працездатний код для свого випадку таблиці бази даних, достатньо вказати (змінити):
- текст SQL-запиту;
- рядок Connection String з’єднання з базою даних.
Також, за власним бажанням можна змінити:
- компонент ListBox на будь-який інший компонент;
- формат представлення інформації.
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(); } } }
⇑
Споріднені теми
- Клас DbConnection. Приклади
- Вступ в ADO .NET. Постачальники даних (провайдери). Простори імен ADO .NET
- Простори імен ADO .NET. Огляд. Інтерфейси ADO .NET
⇑