Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание базы данных MS Access в программном коде

Поиск

Создадим программу, которая во время своей работы создает базу данных Access, то есть файл new_BD.mdb. Эта база данных будет пустой, то есть она не будет содер­жать ни одной таблицы. Наполнять базу данных таблицами можно впоследствии как из программного кода Visual C++ 2010, так и используя MS Access. Заметим, что в этом примере технология ADO.NET не использована.

Запустим Visual Studio 2010 и в окне New Project выберем в среде CLR узла Visual C++ приложение шаблона Console Application CLR. Для добавления в наш про­ект DLL-библиотеки ADOX выполним следующее: в пункте меню Project выберем команду Properties ► Add Reference, затем на вкладке COM дважды щелкнем по ссылке Microsoft ADO Ext. 2.8 for DDL and Security, добавив тем самым эту библиотеку в те­кущий проект. Убедиться в том, что теперь существует ссылка на эту библиотеку, можно в окне Properties. Здесь, щелкнув на узле References, увидим ветвь ADOX. Теперь мы можем ссылаться на это имя в программном коде. Далее вводим про­граммный код, приведенный в листинге 10.3.

Листинг 3. Создание БД во время работы программы

// БДСоздание.cpp: главный файл проекта.

// Программа создает базу данных MS Access, то есть файл new_BD.mdb.

// Эта база данных будет пустой, то есть не будет содержать ни одной таблицы.

// Наполнять базу данных таблицами можно будет впоследствии

// как из программного кода C++ 2010, так и используя MS Access.

// В этом примере технология ADO.NET не использована

#include "stdafx.h"

// Добавим в наш проект библиотеку ADOX: Project⴬Add Reference, и на

// вкладке COM выбираем Microsoft ADO Ext. 2.8 for DDL and Security

using namespace System;

// Для вызова MessageBox выберем следующие пункты меню:

// Project⴬Add Reference и на вкладке.NET дважды щелкнем по ссылке

// System.Windows.Forms.dll, а в тексте программы добавим директиву:

using namespace System::Windows::Forms;

int main(array<System::String ^> ^args)

{

ADOX::Catalog ^Каталог = gcnew ADOX::CatalogClass();

try

{

Каталог->Create("Data Source=\"D:\\new_BD.mdb\";User " +

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

MessageBox::Show("База данных D:\\new_BD.mdb успешно создана");

}

catch (System::Runtime::InteropServices::COMException ^ Ситуация)

{

MessageBox::Show(Ситуация->Message);

}

finally

{ Каталог = nullptr; }

return 0;

}

 

Чтобы был доступен объект MessageBox для вывода сообщений, добавим в про­ект еще одну dll-библиотеку. Для этого, как и в предыдущем случае, укажем пункты меню Project ► Properties ► Add Reference и на вкладке.NET дважды щелкнем по ссылке System.Windows.Forms.dll, а в тексте программы добавим директиву:

Using namespace System::Windows::Forms;

Ключевое слово using используется для импортирования пространства имен, которое содержит класс MessageBox.

Программа работает следующим образом: создаем экземпляр класса ADOX::cata- log, одна из его функций Create способна создавать базу данных, если на ее вход подать строку подключения. Заметим, что в строку подключения входит также и полный путь к создаваемой БД. Функция Create заключена в блоки try...catch, ко­торые обрабатывают исключительные ситуации. После запуска этого приложения получим сообщение о создании базы данных (рис. 8).

  Рис. 8. Сообщение о создании базы данных
  Рис. 9. База данных существует

Если запустить наше приложение еще раз, то мы получим сообщение о том, что такая база данных уже существует (рис. 9), поскольку БД new_BD.mdb только что создана.

 

Данное сообщение генерировалось обработчиком исключительной ситуации. Программный код этой программы можно посмотреть, открыв решение БДСоздание.sln в папке БДСоздание.

 

Запись структуры таблицы в пустую базу данных MS Access. Программная реализация подключения к БД

Теперь здесь и далее мы будем использовать только самую современную техноло­гию ADO.NET. Создадим программу, которая записывает структуру таблицы, то есть «шапку» таблицы, в существующую БД. В этой БД может не быть ни одной таблицы, то есть БД может быть пустой. Либо в БД могут уже быть таблицы, но название новой таблицы должно быть уникальным.

Создадим базу данных new_BD.mdb в корневом каталоге логического диска C:, используя MS Access или программным путем, как это было показано в преды­дущем разделе. Никакие таблицы в базе данных создавать не будем, то есть наша БД будет пустой. Теперь запустим Visual Studio 2010 и в окне New Project выберем в среде CLR узла Visual C++ приложение шаблона Console Application CLR. Затем на­пишем программный код, представленный в листинге 4.

Листинг 4. Создание таблицы в БД MS Access

// БдСоздТаблицы.cpp: главный файл проекта.

// Программа записывает структуру таблицы в пустую базу данных MS Access.

// Программная реализация подключения к БД. В этой БД может еще не быть

// ни одной таблицы, то есть БД может быть пустой. Либо в БД могут уже быть

// таблицы, но название новой таблицы должно быть уникальным

#include "stdafx.h"

using namespace System;

// Для вызова MessageBox выберем следующие пункты меню:

// Project⴬Add Reference и на вкладке.NET дважды щелкнем по ссылке

// System.Windows.Forms.dll, а в тексте программы добавим директиву:

using namespace System::Windows::Forms;

// Добавляем эту директиву для более краткого обращения к классам

// обработки данных:

using namespace System::Data::OleDb;

int main(array<System::String ^> ^args)

{ // ЗАПИСЬ СТРУКТУРЫ ТАБЛИЦЫ В ПУСТУЮ БД:

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

// подключения:

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

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\new_BD.mdb");

// Открытие подключения:

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

// Создание экземпляра объекта класса Command

// с заданием SQL-запроса:

auto Команда = gcnew OleDbCommand("CREATE TABLE [" +

"БД телефонов] ([Номер п/п] counter, [ФИО] ch" +

"ar(20), [Номер телефона] char(20))", Подключение);

try // Выполнение команды SQL:

{

Команда->ExecuteNonQuery();

MessageBox::Show(

"Структура таблицы 'БД телефонов' записана в пустую БД");

}

catch (Exception ^ Ситуация)

{

MessageBox::Show(Ситуация->Message);

}

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

return 0;

}

 

Для работы функции MessageBox::Show следует в текущий проект добавить ссыл­ку на DLL-библиотеку. Для этого в пункте меню Project ► Properties выберем команду Add Reference и на вкладке.NET дважды щелкнем на ссылке System.Windows.Forms.dll.

Как видно из текста программы, вначале мы создаем экземпляр класса Connection с указанием строки подключения, это позволит нам управлять этой строкой про­граммно. Далее создаем экземпляр класса Command с заданием SQL-запроса. В этом запросе создаем (CREATE) новую таблицу с именем БД телефонов с тремя полями: Номер п/п типа счетчик (counter), ФИО и Номер телефона. Имя таблицы и имена по­лей заключены в квадратные скобки, поскольку они содержат пробелы.

Рис. 10. Сообщение о существовании таблицы
Чтобы выполнить эту SQL-команду, вызываем метод ExecuteNonQuery, который заключим в блоки try...catch для обработки исключительных ситуаций. Если SQL- запрос благополучно выполнился, то получаем сообщение: «Структура таблицы 'БД телефонов' записана в пустую БД». А если, например, таблица с таким именем уже имеется в базе данных, то управление передается блоку catch (перехват исключительной ситуации), и мы получаем сообщение о том, что такая таблица базы дан­ных уже существует (рис. 10).

Таким образом, в данной программе сначала органи­зовано подключение Connection к БД через строку под­ключения и открытие подключения Open. Затем задание SQL-запроса в объекте Command и выполнение запроса функцией ExecuteNonQuery. Если связывание данных ор­ганизовать программно, то мы получим большую гибкость для тех случаев, когда, например, на стадии разработки неизвестно заранее, где (на каком диске, в какой папке) будет находиться БД.

Убедиться в работоспособности программы можно, открыв решение БдСоздТаблицы.sln в папке БдСоздТаблицы.



Поделиться:


Последнее изменение этой страницы: 2016-12-11; просмотров: 964; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.235.100 (0.008 с.)