Класс 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
⇑