Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ПИ_ИКТ Программирование по С++ (1 семестр) _Хотов.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5.83 Mб
Скачать

Чтение всех записей из таблицы базы данных c помощью объектов классов Command, DataReader и элемента управления DataGridView

Покажем, как легко и «малой кровью» можно вывести таблицу базы данных на элемент управления DataGridView (сетка данных, то есть таблица данных) с ис­пользованием объектов классов Command и DataReader из предыдущей программы.

Для решения этой задачи запустим Visual Studio 2010 и в окне New Project вы­берем в среде CLR узла Visual C++ приложение шаблона Windows Forms Application Visual C++. Из панели Toolbox добавим в проектируемую форму элемент управления DataGridView и растянем его на всю форму. На вкладке Form1.h напишем программ­ный код, представленный в листинге 6.

Листинг 6. Чтение всех записей из таблицы БД

// ...............

// Программный код, расположенный выше, создан средой Visual Studio

// автоматически, поэтому автором не приводится

this->ResumeLayout(false);

}

#pragma endregion

// Программа читает все записи из таблицы базы данных с помощью объектов

// Command, DataReader на элемент управления DataGridView (сетка данных)

private: System::Void Form1_Load(System::Object^ sender,

System::EventArgs^ e)

{

// Создаем объект Connection и передаем ему строку подключения:

auto Подключение = gcnew OleDb::OleDbConnection(

"Data Source=\"C:\\vic.mdb\";User " +

"ID=Admin;Provider=\"Microsoft.Jet.OLEDB.4.0\";");

Подключение->Open();

// Создаем объект Command, передавая ему SQL-команду

auto Команда = gcnew OleDb::

OleDbCommand("Select * From [БД телефонов]", Подключение);

// Выполняем SQL-команду

auto Читатель = Команда->ExecuteReader();

// (CommandBehavior.CloseConnection)

auto Таблица = gcnew DataTable();

// Заполнение "шапки" таблицы

Таблица->Columns->Add(Читатель->GetName(0));

Таблица->Columns->Add(Читатель->GetName(1));

Таблица->Columns->Add(Читатель->GetName(2));

while (Читатель->Read() == true)

// Заполнение клеток (ячеек) таблицы

Таблица->Rows->Add(Читатель->GetValue(0),

Читатель->GetValue(1), Читатель->GetValue(2));

// Здесь три поля: 0, 1 и 2

Читатель->Close();

Подключение->Close();

dataGridView1->DataSource = Таблица;

}

};

}

Как мы можем видеть, эта программа очень похожа на предыдущую. После вы­полнения SQL-команды создаем объект DataTable, который в конце программного кода задаем как источник (DataSource) для сетки данных dataGridView1. Заполняем «шапку» таблицы, то есть названия колонок, методом Add.

Далее, как и в предыдущей программе, в цикле While заполняем ячейки таблицы. Фрагмент работы программы показан на рис. 11.

- □ х

Номер

п/п

ФИО

Номер телефона

1

Л омапинская

3-063-835-77-77

2

Саня Т имощук

274-23-44

3

Мама

263-63-77

4

Прогноз погоды

001

5

Света-ХФ!

3-067-23-14-401

6

Андрей Зиборов

8-083-260-43-43

7

Карапчзоеа

8-097-28-14-401

8

Погребицкий

543-53-13

*

Рис. 11. Отображение таблицы базы данных на элементе DataGridView

В этой таблице мы можем сортировать записи по любой из колонок, щелкая мышью на названиях соответствующих колонок. Можем редактировать (изме­нять) содержимое ячеек, но в базу данных эти изменения не попадут (сохранения не произойдет).

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

Убедиться в работоспособности программы можно, открыв решение БдReader- GridView.sln в папке БдReaderGridView.