Главная · Карта сайта · Поиск · Статьи · Компьютерные курсы · Обучающие программы · Открытые проекты · Веб-программирование · Создание интернет-сайта · Полезные ссылки · Глоссарий · Контакты · Декабрь 06 2016 22:48:16
Последнее опубликованное

Что такое Model-View-Controller
Pattern Model-View-Controller

Как создать свой веб-сайт
Как создать свой сайт в интернете

Разное
Статистика

Основы программирования. Консольное приложение


Содержание курса

Первое приложение. Без комментариев...

Шаг 11. Базы данных и первое консольное приложение

Почему первое приложение и только на 11-м шаге? На самом деле первым приложением можно было бы назвать и пример с сортировкой, рассмотренный на самом первом шаге, но я уверен, что реальных пользователей для него найти сложно. Программы, рассматриваемые сейчас, предоставляют пользователю возможность не только выполнять SQL запросы, но и редактировать данные в базе данных, что уже само по себе является завершенным набором предлагаемых пользователю действий. Таким образом, если устранить все минусы реализации, о которых будет сказано чуть ниже, у подобных программ, помимо их автора, потенциально могут быть и другие пользователи. Более совершенный, но также не лишенный ряда недостатков вариант этого же приложения будет представлен на следующем шаге – тот же набор функций будет доступен пользователю посредством графического пользовательского интерфейса.

Описание задачи

Кратко перечислю, какие функции и в каком режиме будут предоставляться пользователю рассматриваемых ниже программ:

  • Работа с базой данных в режиме транзакции. Транзакция позволяет рассматривать работу нескольких изменяющих данные SQL запросов, как одну целостную операцию, результат работы которой можно либо сохранить в базе данных либо целиком отменить – откатить транзакцию. Если вы не знакомы с инструкциями SQL, изменяющими информацию в базе данных, то предлагаю узнать про них здесь.

  • Общение программы с пользователем посредством неграфического интерфейса – консоли. Результаты SELECT запросов, а также количество записей, обработанных UPDATE, DELETE и INSERT командами будут выводиться на консоль. Также, на консоль будет выводиться информация об ошибках и возможных дальнейших действиях пользователя – т.е. все, как и раньше.

Описание реализации

После запуска, программа сразу же осуществляет соединение с базой данных Data.mdb, которая должна находиться в том же каталоге, что и сама программа. Как и в случае предыдущих шагов, предлагается использовать базу данных компьютерного курса SQL 25™. Если соединение с базой данных осуществить по какой-то причине не удастся, то на консоль будет выведено сообщение о причинах такой неудачи, и программа завершится. Если соединение прошло удачно, то запускается цикл while, на каждой итерации которого пользователю предлагается ввести запрос и получить информацию о результатах его работы. В случае если в ходе ввода SQL запроса была допущена синтаксическая или семантическая ошибка, то сообщение об этом также будет выведено на консоль. В конце каждой итерации (после обработки очередного запроса) пользователь может либо продолжить работу с программой, нажав ‘Enter’, либо закончить работу, нажав любую другую кнопку. В последнем случае логическая переменная Continue, являющаяся условием продолжения работы цикла while принимает значение false и цикл while завершается. Далее, если в процессе работы был выполнен хотя бы один модифицирующий данные SQL запрос, то пользователю будет предложено сохранить эти изменения в базе данных или выйти из программы без сохранения изменений. О наличии изменений, которые могли бы быть сохранены в базе данных, программа узнает по значению логической переменной DataChanged, которое определяется в теле основного цикла. Ну и в конце работы соединение с базой данных закрывается. Обратите внимание, что делается это в теле блока finally, который гарантирует выполнение этого кода, как в случае ошибок, так и в случае корректного завершения программы. Более подробно про исключительные ситуации и блок finally можно узнать здесь. Стоит отметить, что результат работы команды SELECT учитывает изменения, внесенные командами UPDATE, DELETE и INSERT в контексте текущей транзакции, в чем можно будет убедиться, запустив программу и выполнив пару запросов.

Детали реализации

  • Для работы с базой данных создан отдельный класс DataManager. Впервые про классы в рамках этого курса программирования упоминалось на шаге “Пять классов математики”, где я попытался кратко изложить преимущества объектно-ориентированного программирования. Здесь я использовал отдельный класс для того, чтобы отделить детали реализации работы с базой данных от логики самой программы. Если, например, понадобится реализовать работу с любой другой СУБД (не Microsoft Access), то достаточно будет внести изменения только в код класса DataManager. Можно, конечно, развить идею и дальше, определив абстрактный класс работы с любой базой данных и реализовав производные от него классы для каждой конкретной СУБД, но уже не в рамках этого шага.

  • Класс DataManager реализует два разных метода для обработки SQL запросов: метод Select() для выполнения SELECT запросов и метод Execute() для выполнения запросов, направленных на редактирование данных посредством команд UPDATE, DELETE и INSERT. Какой из этих двух методов выполнять определяется по первому ключевому слову введенного пользователем SQL запроса. В случае если первым словом во введенном SQL (SQL.StartsWith) является SELECT, то вызывается метод Select(), во всех других случаях вызывается метод Execute(). Во втором варианте также изменяется значение переменной DataChanged, о которой упоминалось выше.

Алгоритм программы, включая определение класса DataManager, достаточно объемный, и нет никакого смысла публиковать какую-то его отдельную часть здесь. Для более детального изучения работы программы необходимо скачать ее исходный код на C# или VB.NET и открыть в обучающей программе.

Исходный код программ

На языке C#.
На языке VB.NET.

Тестовый набор данных

Файл базы данных Microsoft Access Data.rar (Data.mdb).

Самостоятельно

Буквально пару слов о минусах реализации, которые предлагается, если такое желание появится, устранить самостоятельно:

  • Путь к базе данных “зашит” в код программы. Предлагается вводить путь к базе данных из консоли или читать из текстового или XML файла, как это было сделано на предыдущих шагах.

  • В ходе рассмотрения нюансов работы с базой данных, на предыдущих этапах делался акцент на том, что работа с экземплярами таких классов, как DbCommand и DbReader необходимо осуществлять в контексте оператора using, который гарантирует корректное освобождение занимаемых ими ресурсов операционной системы. Замечу, что если этого не делать, то ресурсы все равно будут освобождены, но только тогда, когда об этом позаботится сборщик мусора среды исполнения CLR. Оператор using хорош в тех случаях, когда использование подобных объектов представлено только одним отдельным фрагментом кода. Во всех других случаях можно использовать явный вызов метода Dispose() интерфейса IDisposable ровно в тот момент, когда необходимость в объекте исчезает. Как это делается описано здесь.

Далее: Первое GUI приложение



Компьютерные курсы и курсы программирования
Основы программирования

Курс для начинающих программистов на C# и VB.NET.

SQL 25™

Построение SQL запросов и работа с базой данных.

C# Quick Guide™

Программирование на C#. Краткое руководство.

RegEx

Применение регулярных выражений.

Plug-in архитектура

Примеры программной Plug-in архитектуры.

XML и его расширения

Язык разметки XML и его расширения с примерами.

HTML и разметка гипертекста

Языки HTML, XHTML и CSS с примерами разметки.

Основы веб-дизайна

Основы веб-дизайна: решения типовых задач верстки.

Программирование на PHP

Руководство по программированию на PHP для начинающих.

Справочные материалы

Шаблоны проектирования
Каталог шаблонов проектирования программных компонентов.

Рефакторинг кода
Каталог приемов рефакторинга программного кода.

Гость
Имя

Пароль



Забыли пароль?
Запросите новый здесь
.
Coding Craft. Все права защищены © 2011. Проект Инициативного Народного Фронта Образования - ИНФО-проект.