Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 957
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
SQL-запроса: сортировать записи по колонке ФИО (order by фио) и по колонке Номер п/п (order by ‘Номер п/п' ).
Затем, используя объект класса DataReader, выполняем SQL-команду. Далее в цикле построчно читаем таблицу базы данных. При работе DataReader в памяти хранится только одна строка (запись) данных. Объект класса DataReader имеет булеву функцию Read, которая возвращает true, если существует следующая строка данных, и false, если такие строки (записи) уже исчерпались. Причем с помощью DataReader невозможно заранее узнать количество записей в таблице.
Результат работы программы показан на рис. 10.10.
Рис. 10.10. Отображение таблицы базы данных на консоли
Таким образом, мы получили простейшую программу для просмотра таблицы базы данных. С ее помощью можно только просматривать данные, но нельзя их редактировать.
Убедиться в работоспособности программы можно, открыв решение БДDataReader1.sln в папке БДDataReader1.
Пример 68. Создание базы данных MS Access в программном коде
Создадим программу, которая во время своей работы создает базу данных Access, т. е. файл new_BD.mdb. Эта база данных будет пустой, т. е. она не будет содержать ни одной таблицы. Наполнять базу данных таблицами можно впоследствии как из программного кода Visual C# 2010, так и используя MS Access. Заметим, что в этом примере технология ADO.NET не использована.
Запускаем Visual Studio 2010 (загрузочный модуль devenv.exe), щелкаем пункт меню меню New Project и выбираем шаблон Console Application С#. Для добавления в наш проект DLL-библиотеки ADOX выполним следующее. В пункте меню Project выберем команду Add Reference, затем на вкладке СОМ дважды щелкнем ссылке Microsoft ADO Ext. 2.8 for DDL and Security, тем самым мы добавляем библиотеку в текущий проект. Убедиться в том, что теперь существует ссылка эту библиотеку, можно в окне Solution Explorer. Здесь, щелкнув на узле References, увидим ветвь ADOX. Теперь мы можем ссылаться на это имя в программном коде. Далее вводим программный код, приведенный в листинге 10.2.
Листинг 10.2. Создание БД во время работы программы
// Программа создает базу данных MS Access, т. е. файл new_BD.mdb.
// Эта база данных будет пустой, т. е. не будет содержать ни одной таблицы.
// Наполнять базу данных таблицами можно будет впоследствии
// как из программного кода С# 2010, так и используя MS Access.
// В этом примере технология ADO.NET не использована
using System.Windows.Forms; // - добавили эту директиву для MessageBox
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace БДСоздание
{ // Для добавления ADOX: Project | Add Reference, на вкладке СОМ выбрать
// Microsoft ADO Ext. 2.8 for DDL and Security
class Program
{
static void Main(string[] args)
{
ADOX.Catalog Каталог = new ADOX.Catalog));
try
{
Каталог.Create("Provider=Microsoft.Jet." + "OLEDB.4.0;Data Source=C:\\new_BD.mdb");
MessageBox.Show("База данных С:\\new_BD.mdb успешно создана");
}
catch (System.Runtime.InteropServices.COMException Ex)
{ MessageBox.Show(Ex.Message); }
finally
{ Каталог = null; }
}
}
}
Далее чтобы во время выполнения программы не появлялось черное окно DOS, в пунктах меню Project | ConsoleApplicationl Properties на вкладке Application в скрывающемся списке Application type выберем Windows Forms Application. Чтобы был доступен объект MessageBox для вывода сообщений, добавим в проект еще одну DLL-библиотеку. Для этого, как и в предыдущем случае, укажем пункты меню Project | Add Reference и на вкладке .NET дважды щелкнем по ссылке System.Windows.Forms.dll, а в тексте программы добавим директиву:
using System.Windows.Forms;
Ключевое слово using используется для импортирования пространства имен, которое содержит класс MessageBox.
Программа работает следующим образом: создаем экземпляр класса ADOX.catalog, одна из его функций Create способна создавать базу данных, если на ее вход подать строку подключения. Заметим, что в строку подключения входит также и полный путь к создаваемой БД. Функция Create заключена в блоки try...catch, которые обрабатывают исключительные ситуации. После запуска этого приложения получим сообщение о создании базы данных (рис. 10.11).
Если же тут же запустим наше приложение еще раз, то получим сообщение о том, что такая база данных уже существует (рис. 10.12), поскольку БД new_BD.mdb только что создана.
Рис. 10.11. Сообщение о создании базы данных Рис. 10.12. База данных существует
Данное сообщение генерировалось обработчиком исключительной ситуации. Программный код этой программы можно посмотреть, открыв решение
БДСоздание.sln в папке БДСоздание.
Пример 69. Запись структуры таблицы в пустую базу данных MS Access. Программная реализация подключения к БД
Теперь здесь и далее мы используем только самую современную технологию ADO .NET. Создадим программу, которая записывает структуру таблицы, т. е. "папку" таблицы, в существующую БД. В этой БД может еще не быть ни одной таблицы, т. е. БД может быть пустой. Либо в БД могут уже быть таблицы, но название новой таблицы должно быть уникальным.
Создадим базу данных new_BD.mdb в корневом каталоге логического диска С:, используя MS Access или программным путем, как это было показано в предыдущем разделе. Никакие таблицы в базе данных создавать не станем, т. е. будем иметь пустую БД. Теперь запустим Visual Studio 2010, затем выберем пункт меню New Project. Далее, поскольку для этого приложения нам не нужна экранная форма с ее элементами управления, укажем среди шаблонов Console Application С#. За напишем программный код, представленный в листинге 10.3.
Листинг 10.3. Создание таблицы в БД MS Access
// Программа записывает структуру таблицы в пустую базу, данных MS Access.
// Программная реализация подключения к БД. В этой БД может
// еще не быть ни одной таблицы, т. е. БД может быть пустой. Либо в БД
// могут уже быть таблицы, но название новой таблицы должно быть уникальным
using System;
using System.Windows.Forms; // - добавили эту директиву для MessageBox
// Добавляем эту директиву для краткости выражений:
using ОлеДиБи = System.Data.OleDb;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace БдСоздТаблицы
{ // ЗАПИСЬ СТРУКТУРЫ ТАБЛИЦЫ В ПУСТУЮ БД:
class Program
{
static void Main(string[] args)
{ // Создание экземпляра объекта Connection с указанием строки подключения:
var Подключение = new ОлеДиБи.OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\new_BD.mdb");
// Открытие подключения:
Подключение.Open();
// Создание экземпляра объекта класса Command с заданием SQL-запроса:
var Команда = new ОлеДиБи.OleDbCommand("CREATE TABLE [" +
"БД телефонов] ([Номер п/п] counter, [ФИО] ch" + "аг(20), [Номер телефона] char(20))", Подключение);
try // Выполнение команды SQL:
{
Команда. ExecuteNonQuery ();
MessageBox.Show("Структура таблицы 'БД телефонов' записана пустую БД");
}
catch (Exception Ситуация)
{ MessageBox.Show(Ситуация.Message); }
Подключение.Close();
}
}
}
Чтобы работала функция MessageBox. Show, следует в текущий проект добавить ссылку на DLL-библиотеку. Для этого в пункте меню Project выберем команду Аdd Reference и на вкладке .NET дважды щелкнем на ссылке System.Windows.Forms.dll. Кроме того, используя пункты меню Project | ConsoleApplicationl Properties, на появившейся вкладке Application в раскрывающемся списке Application type выберем тип приложения Windows Forms Application.
Как видно из текста программы, вначале создаем экземпляр класса Connection с указанием строки подключения. Теперь мы имеем возможность управлять этой строкой программно. Далее создаем экземпляр класса Command с заданием SQL-запроса. В этом запросе создаем (create) новую таблицу с именем БД телефонов с тремя полями: Номер п/п типа счетчик (counter), ФИО и Номер телефона. Здесь имя таблицы и имена полей заключены в квадратные скобки, поскольку они содержат пробелы.
Чтобы выполнить эту SQL-команду, вызываем метод ExecuteNonQuery, который заключим в блоки try. . .catch для обработки исключительных ситуаций. Если SQL-запрос благополучно выполнился, то получаем сообщение: "Структура таблицы 'БД телефонов' записана в пустую БД". А если, например, таблица с таким именем уже имеется в базе данных, то управление передается блоку catch (перехват исключительной ситуации), и мы получаем сообщение о том, что такая таблица базы данных уже существует (рис. 10.13).
Рис. 10.13. Сообщение о существовании таблицы
Таким образом, в данной программе сначала организовано подключение Connection к БД через строку подключения и открытие подключения Open. Затем задание SQL-запроса в объекте Сommand и выполнение запроса функцией ExecuteNonQuery. Если связывание данных организовать программно, то добивайся более высокой гибкости, когда, например, на стадии разработки неизвестно заранее, где (на каком диске, в какой папке) будет находиться БД.
Убедиться в работоспособности программы можно, открыв решение БдСоздТаблицы.slп в папке БдСоздТаблицы.
Пример 70. Добавление записей в таблицу базы данных MS Access
Совсем маленькую программу из предыдущего раздела можно использовать для выполнения
любого запроса к базе данных. Например, модифицируем всего лишь одну строчку программного кода программы из предыдущего примера для добавления новой записи в таблицу БД. Для этого при создании экземпляра объекте Соmmand зададим SQL-запрос на вставку (insert) новой записи в таблицу БД.
Заметим, что в SQL-запросе мы сознательно обратились к таблице по имени [ бд телефонов], т. е. со строчной буквы, хотя надо с прописной. Дело в том, что в именах таблиц следует точно указывать регистр символа, поскольку их поиск ведется с учетом регистра (case-sensitive search). Однако это не обязательно при наличии только одной таблицы с таким именем, поскольку при этом используется поиск без учета регистра (case-insensitive search).
Свойству Сonnection объекта класса Сommand следует дать ссылку на объект класса Сonnection:
Команда .Connection = Подключение;
Причем для добавления записи в таблицу БД такая ссылка обязательна в отличие предыдущего примера, где мы создавали новую таблицу в существующей БД. Программный код будет выглядеть так, как представлено в листинге 10.4.
Листинг 10.4. Добавление записей в таблицу базы данных MS Access
//Программа добавляет запись в таблицу базы данных MS Access. Для этого
//при создании экземпляра объекта Command задаем SQL-запрос
//на вставку (Insert) новой записи в таблицу базы данных
using System.Windows.Forms; // - добавили эту директиву для MessageBox
//Добавляем эту директиву для краткости выражений:
using ОлеДиБи = System.Data.OleDb;
//Другие директивы using удалены, поскольку они не используются в данной программе
namespace БдДобавлЗаписи
{
class Program
{ // ДОБАВЛЕНИЕ ЗАПИСИ В ТАБЛИЦУ БД:
static void Main(string[] args)
{ // Создание экземпляра объекта Connection
// с указанием строки подключения:
var Подключение = new ОлеДиБи.OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\new_BD.mdb");
// Открытие подключения:
Подключение.Open();
// Создание экземпляра объекта Command с заданием SQL-запроса:
var Команда = new ОлеДиБи.OleDbCommand( "INSERT INTO [бд телефонов] (" +
"Фио, [номер телефона]) VALUES ('Света-Х', '521-61-41')");
// Для добавления записи в таблицу БД эта команда обязательна:
Команда.Connection = Подключение;
// Выполнение команды SQL:
Команда. ExecuteNonQuery () ;
MessageBox.Show("В таблицу 'БД телефонов' добавлена запись");
Подключение.Close();
}
}
}
Часто, отлаживая программный код на Visual Studio С#, при работе с БД появляется необходимость проверки работы
Затем, используя объект класса DataReader, выполняем SQL-команду. Далее в цикле построчно читаем таблицу базы данных. При работе DataReader в памяти хранится только одна строка (запись) данных. Объект класса DataReader имеет булеву функцию Read, которая возвращает true, если существует следующая строка данных, и false, если такие строки (записи) уже исчерпались. Причем с помощью DataReader невозможно заранее узнать количество записей в таблице.
Результат работы программы показан на рис. 10.10.
Рис. 10.10. Отображение таблицы базы данных на консоли
Таким образом, мы получили простейшую программу для просмотра таблицы базы данных. С ее помощью можно только просматривать данные, но нельзя их редактировать.
Убедиться в работоспособности программы можно, открыв решение БДDataReader1.sln в папке БДDataReader1.
Пример 68. Создание базы данных MS Access в программном коде
Создадим программу, которая во время своей работы создает базу данных Access, т. е. файл new_BD.mdb. Эта база данных будет пустой, т. е. она не будет содержать ни одной таблицы. Наполнять базу данных таблицами можно впоследствии как из программного кода Visual C# 2010, так и используя MS Access. Заметим, что в этом примере технология ADO.NET не использована.
Запускаем Visual Studio 2010 (загрузочный модуль devenv.exe), щелкаем пункт меню меню New Project и выбираем шаблон Console Application С#. Для добавления в наш проект DLL-библиотеки ADOX выполним следующее. В пункте меню Project выберем команду Add Reference, затем на вкладке СОМ дважды щелкнем ссылке Microsoft ADO Ext. 2.8 for DDL and Security, тем самым мы добавляем библиотеку в текущий проект. Убедиться в том, что теперь существует ссылка эту библиотеку, можно в окне Solution Explorer. Здесь, щелкнув на узле References, увидим ветвь ADOX. Теперь мы можем ссылаться на это имя в программном коде. Далее вводим программный код, приведенный в листинге 10.2.
Листинг 10.2. Создание БД во время работы программы
// Программа создает базу данных MS Access, т. е. файл new_BD.mdb.
// Эта база данных будет пустой, т. е. не будет содержать ни одной таблицы.
// Наполнять базу данных таблицами можно будет впоследствии
// как из программного кода С# 2010, так и используя MS Access.
// В этом примере технология ADO.NET не использована
using System.Windows.Forms; // - добавили эту директиву для MessageBox
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace БДСоздание
{ // Для добавления ADOX: Project | Add Reference, на вкладке СОМ выбрать
// Microsoft ADO Ext. 2.8 for DDL and Security
class Program
{
static void Main(string[] args)
{
ADOX.Catalog Каталог = new ADOX.Catalog));
try
{
Каталог.Create("Provider=Microsoft.Jet." + "OLEDB.4.0;Data Source=C:\\new_BD.mdb");
MessageBox.Show("База данных С:\\new_BD.mdb успешно создана");
}
catch (System.Runtime.InteropServices.COMException Ex)
{ MessageBox.Show(Ex.Message); }
finally
{ Каталог = null; }
}
}
}
Далее чтобы во время выполнения программы не появлялось черное окно DOS, в пунктах меню Project | ConsoleApplicationl Properties на вкладке Application в скрывающемся списке Application type выберем Windows Forms Application. Чтобы был доступен объект MessageBox для вывода сообщений, добавим в проект еще одну DLL-библиотеку. Для этого, как и в предыдущем случае, укажем пункты меню Project | Add Reference и на вкладке .NET дважды щелкнем по ссылке System.Windows.Forms.dll, а в тексте программы добавим директиву:
using System.Windows.Forms;
Ключевое слово using используется для импортирования пространства имен, которое содержит класс MessageBox.
Программа работает следующим образом: создаем экземпляр класса ADOX.catalog, одна из его функций Create способна создавать базу данных, если на ее вход подать строку подключения. Заметим, что в строку подключения входит также и полный путь к создаваемой БД. Функция Create заключена в блоки try...catch, которые обрабатывают исключительные ситуации. После запуска этого приложения получим сообщение о создании базы данных (рис. 10.11).
Если же тут же запустим наше приложение еще раз, то получим сообщение о том, что такая база данных уже существует (рис. 10.12), поскольку БД new_BD.mdb только что создана.
Рис. 10.11. Сообщение о создании базы данных Рис. 10.12. База данных существует
Данное сообщение генерировалось обработчиком исключительной ситуации. Программный код этой программы можно посмотреть, открыв решение
БДСоздание.sln в папке БДСоздание.
Пример 69. Запись структуры таблицы в пустую базу данных MS Access. Программная реализация подключения к БД
Теперь здесь и далее мы используем только самую современную технологию ADO .NET. Создадим программу, которая записывает структуру таблицы, т. е. "папку" таблицы, в существующую БД. В этой БД может еще не быть ни одной таблицы, т. е. БД может быть пустой. Либо в БД могут уже быть таблицы, но название новой таблицы должно быть уникальным.
Создадим базу данных new_BD.mdb в корневом каталоге логического диска С:, используя MS Access или программным путем, как это было показано в предыдущем разделе. Никакие таблицы в базе данных создавать не станем, т. е. будем иметь пустую БД. Теперь запустим Visual Studio 2010, затем выберем пункт меню New Project. Далее, поскольку для этого приложения нам не нужна экранная форма с ее элементами управления, укажем среди шаблонов Console Application С#. За напишем программный код, представленный в листинге 10.3.
Листинг 10.3. Создание таблицы в БД MS Access
// Программа записывает структуру таблицы в пустую базу, данных MS Access.
// Программная реализация подключения к БД. В этой БД может
// еще не быть ни одной таблицы, т. е. БД может быть пустой. Либо в БД
// могут уже быть таблицы, но название новой таблицы должно быть уникальным
using System;
using System.Windows.Forms; // - добавили эту директиву для MessageBox
// Добавляем эту директиву для краткости выражений:
using ОлеДиБи = System.Data.OleDb;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace БдСоздТаблицы
{ // ЗАПИСЬ СТРУКТУРЫ ТАБЛИЦЫ В ПУСТУЮ БД:
class Program
{
static void Main(string[] args)
{ // Создание экземпляра объекта Connection с указанием строки подключения:
var Подключение = new ОлеДиБи.OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\new_BD.mdb");
// Открытие подключения:
Подключение.Open();
// Создание экземпляра объекта класса Command с заданием SQL-запроса:
var Команда = new ОлеДиБи.OleDbCommand("CREATE TABLE [" +
"БД телефонов] ([Номер п/п] counter, [ФИО] ch" + "аг(20), [Номер телефона] char(20))", Подключение);
try // Выполнение команды SQL:
{
Команда. ExecuteNonQuery ();
MessageBox.Show("Структура таблицы 'БД телефонов' записана пустую БД");
}
catch (Exception Ситуация)
{ MessageBox.Show(Ситуация.Message); }
Подключение.Close();
}
}
}
Чтобы работала функция MessageBox. Show, следует в текущий проект добавить ссылку на DLL-библиотеку. Для этого в пункте меню Project выберем команду Аdd Reference и на вкладке .NET дважды щелкнем на ссылке System.Windows.Forms.dll. Кроме того, используя пункты меню Project | ConsoleApplicationl Properties, на появившейся вкладке Application в раскрывающемся списке Application type выберем тип приложения Windows Forms Application.
Как видно из текста программы, вначале создаем экземпляр класса Connection с указанием строки подключения. Теперь мы имеем возможность управлять этой строкой программно. Далее создаем экземпляр класса Command с заданием SQL-запроса. В этом запросе создаем (create) новую таблицу с именем БД телефонов с тремя полями: Номер п/п типа счетчик (counter), ФИО и Номер телефона. Здесь имя таблицы и имена полей заключены в квадратные скобки, поскольку они содержат пробелы.
Чтобы выполнить эту SQL-команду, вызываем метод ExecuteNonQuery, который заключим в блоки try. . .catch для обработки исключительных ситуаций. Если SQL-запрос благополучно выполнился, то получаем сообщение: "Структура таблицы 'БД телефонов' записана в пустую БД". А если, например, таблица с таким именем уже имеется в базе данных, то управление передается блоку catch (перехват исключительной ситуации), и мы получаем сообщение о том, что такая таблица базы данных уже существует (рис. 10.13).
Рис. 10.13. Сообщение о существовании таблицы
Таким образом, в данной программе сначала организовано подключение Connection к БД через строку подключения и открытие подключения Open. Затем задание SQL-запроса в объекте Сommand и выполнение запроса функцией ExecuteNonQuery. Если связывание данных организовать программно, то добивайся более высокой гибкости, когда, например, на стадии разработки неизвестно заранее, где (на каком диске, в какой папке) будет находиться БД.
Убедиться в работоспособности программы можно, открыв решение БдСоздТаблицы.slп в папке БдСоздТаблицы.
Пример 70. Добавление записей в таблицу базы данных MS Access
Совсем маленькую программу из предыдущего раздела можно использовать для выполнения
любого запроса к базе данных. Например, модифицируем всего лишь одну строчку программного кода программы из предыдущего примера для добавления новой записи в таблицу БД. Для этого при создании экземпляра объекте Соmmand зададим SQL-запрос на вставку (insert) новой записи в таблицу БД.
Заметим, что в SQL-запросе мы сознательно обратились к таблице по имени [ бд телефонов], т. е. со строчной буквы, хотя надо с прописной. Дело в том, что в именах таблиц следует точно указывать регистр символа, поскольку их поиск ведется с учетом регистра (case-sensitive search). Однако это не обязательно при наличии только одной таблицы с таким именем, поскольку при этом используется поиск без учета регистра (case-insensitive search).
Свойству Сonnection объекта класса Сommand следует дать ссылку на объект класса Сonnection:
Команда .Connection = Подключение;
Причем для добавления записи в таблицу БД такая ссылка обязательна в отличие предыдущего примера, где мы создавали новую таблицу в существующей БД. Программный код будет выглядеть так, как представлено в листинге 10.4.
Листинг 10.4. Добавление записей в таблицу базы данных MS Access
//Программа добавляет запись в таблицу базы данных MS Access. Для этого
//при создании экземпляра объекта Command задаем SQL-запрос
//на вставку (Insert) новой записи в таблицу базы данных
using System.Windows.Forms; // - добавили эту директиву для MessageBox
//Добавляем эту директиву для краткости выражений:
using ОлеДиБи = System.Data.OleDb;
//Другие директивы using удалены, поскольку они не используются в данной программе
namespace БдДобавлЗаписи
{
class Program
{ // ДОБАВЛЕНИЕ ЗАПИСИ В ТАБЛИЦУ БД:
static void Main(string[] args)
{ // Создание экземпляра объекта Connection
// с указанием строки подключения:
var Подключение = new ОлеДиБи.OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\new_BD.mdb");
// Открытие подключения:
Подключение.Open();
// Создание экземпляра объекта Command с заданием SQL-запроса:
var Команда = new ОлеДиБи.OleDbCommand( "INSERT INTO [бд телефонов] (" +
"Фио, [номер телефона]) VALUES ('Света-Х', '521-61-41')");
// Для добавления записи в таблицу БД эта команда обязательна:
Команда.Connection = Подключение;
// Выполнение команды SQL:
Команда. ExecuteNonQuery () ;
MessageBox.Show("В таблицу 'БД телефонов' добавлена запись");
Подключение.Close();
}
}
}
Часто, отлаживая программный код на Visual Studio С#, при работе с БД появляется необходимость проверки работы