Это практическое руководство разработчика программного обеспечения на Visual Basic .NET и ADO.NET, предназначенное для создания приложений баз данных на основе WinForms, Web-форм и Web-служб. В книге описываются практические способы решения задач доступа к данным, с которыми сталкиваются разработчики на Visual Basic .NET в своей повседневной деятельности. Книга начинается с основных сведений о создании баз данных, использовании языка структурированных запросов SQL и системы управления базами данных Microsoft SQL Server 2000. Затем рассматриваются способы использования основных объектов модели ADO.NET для доступа к данным в реляционных базах данных. Благодаря подробным примерам, читатели могут изучить способы использования основных свойств и методов, а также узнать о более сложных компонентах и технологиях. Многочисленные листинги с кодом на языке Visual Basic .NET иллюстрируют используемые концепции, а бизнес-ситуации показывают практическую область их применения.
Предисловие
В этой книге рассматриваются способы создания приложений для работы с базами данных на основе Visual Basic .NET и ADO.NET.
Хотя в ней описываются в основном провайдеры данных OLEDB и ODBC для .NET (глава 4, "Модель ADO.NET: провайдеры данных"), практически все примеры основаны на провайдере данных для сервера баз данных Microsoft SQL Server, которая используется большинством наших читателей. Более того, описываемые здесь подходы и концепции обычно можно очень просто применить для использования других источников данных. Все наиболее значительные отличия в способах использования этих технологий сопровождаются подробными комментариями.
Предполагая, что большинство читателей уже имеют опыт работы с сервером SQL Server, мы все же постарались сделать книгу доступной и для тех, кто не имеет большого опыта работы с ним. Некоторые читатели имеют ограниченный опыт работы с приложениями для баз данных или работали с другими типами баз данных, например с Microsoft Access или Oracle. Поэтому в главе 3, "Знакомство с SQL Server 2000", предлагается краткий обзор основных приемов работы с сервером Microsoft SQL Server. Опытные специалисты SQL Server могут без ущерба для понимания остальных глав пропустить эту вводную главу. Тем не менее следует учесть, что она покрывает широкий круг тем, а потому даже опытный читатель сможет найти в ней несколько полезных советов, ради которых стоит хотя бы бегло просмотреть всю главу.
Помимо основных сведений об SQL Server, здесь описываются язык XML и способы интеграции XML с ADO.NET. Этот очень важный аспект создания приложений баз данных с помощью Visual Basic .NET часто недооценивается или описывается недостаточно полно. Поскольку XML играет очень важную роль в создании современных приложений для работы с данными, эта тема излагается здесь очень подробно.
В книге содержится множество листингов и примеров, которые, несомненно, помогут наилучшим образом понять предлагаемый материал. Обычно описание основных принципов иллюстрируется очень простыми примерами, а затем для описания реального контекста предлагаются типичные бизнес-ситуации.
Для кого предназначена эта книга
Предполагается, что читатель уже знаком с основами Visual Basic.NET. Хотя здесь предлагаются очень подробные и последовательные инструкции по созданию кода, все же в этой книге не ставилась цель обучить читателя основам синтаксиса Visual Basic. Мы считаем, что читатель уже владеет основными навыками работы с Visual Basic.NET и Visual Studio.NET, а потому решили не тратить времени на повторение общеизвестных базовых сведений. В частности, за исключением только первого примера, здесь не рассматриваются такие стандартные операции, как открытие и сохранение проектов. Наряду с этим, выполнение одной и той же операции нередко описывается несколькими разными способами, что позволит читателю расширить свои знания Visual Basic.NET без лишнего повторения одних и тех же базовых сведений. Поэтому часто приводятся разные стили кодирования и копии экранов для разных версий Windows, которые иллюстрируют гибкость Visual Basic.NET.
Большинство примеров этой книги демонстрируются с помощью типа проекта Windows Application на основе Windows Forms. Дело в том, что многие программисты на Visual Basic очень хорошо знают и часто используют этот тип проекта. Это позволяет нам сфокусироваться на способах доступа к базе данных, а не на особенностях использования разных типов проектов.NET. В последних главах книги описываются приложения на основе ASP.NET и Web-службы, поэтому в рассматриваемых там примерах представлены другие технологии и типы проектов.
Структура книги
Книга содержит три части. Первая часть состоит из глав 1-3 с предварительными сведениями о базах данных, языке SQL и сервере баз данных SQL Server. Эти фундаментальные сведения позволят читателю познакомиться с основными концепциями и понятиями, используемыми в книге. Кроме того, эти главы содержат краткие обзоры важных тем, которые будут полезны даже очень опытным специалистам в этих областях.
Вторая часть содержит основной материал книги. В главах 4-7 предлагаются подробные объяснения и многочисленные примеры основных объектов ADO.NET, a также способы использования их свойств и методов. В главе 7, дополнительные компоненты", рассматриваются более сложные компоненты и способы работы с объектами ADO.NET.
В третьей части книги приводятся фундаментальные способы применения ADO.NET для создания профессиональных приложений, а также рассматриваются методы использования проектов Visual Studio Data Projects для работы со сценариями SQL (глава 8, "Работа с проектом базы данных в среде Visual Studio.NET"), язык XML (глава 9, "XML и .NET") и вопросы интеграции XML с ADO.NET (глава 10, "ADO.NET и XML"). Наконец, в последних главах описываются дополнительные типы проектов на основе ADO.NET: Web-приложения на основе ASP.NET (глава 11, "Web-формы: приложения на основе ASP.NET для работы с базами данных"), а также Web-службы и объекты промежуточного уровня (глава 12, "Web-службы и технологии промежуточного уровня").
Используемое программное обеспечение
Предполагается, что читатель уже установил или способен самостоятельно установить интегрированную среду разработки приложений Visual Studio .NET. Следует учесть перечисленные различия, которые существуют между разными редакциями среды Visual Studio .NET в отношении функциональных возможностей и типа используемой базы данных.
В некоторых местах глав 1, 2 и 8 используются компоненты, которые предусмотрены только в редакциях Enterprise Developer или Enterprise Architect среды Visual Studio.
В главе 3, "Знакомство с SQL Server 2000", предлагается подробное описание процесса инсталляции SQL Server 2000, которое будет особенно полезно для читателей, не имеющих опыта инсталляции этого программного продукта. Для тестовой базы данных pubs, которая поставляется вместе с SQL Server, рекомендуется создать резервную копию, потому что она используется во многих примерах этой книги и ее данные часто редактируются.
В предлагаемых бизнес-ситуациях и многих примерах используется специально созданная для этой книги база данных Novelty. В главах 3 и 8 подробно описаны сценарии создания этой базы данных. Для использования примеров нужно сначала создать базу данных Novelty на компьютере с сервером SQL Server 2000 и наполнить ее данными. При описании этих операций предполагается, что читатель обладает всеми необходимыми правами для создания базы данных на этом сервере. Учтите, что некоторые пользователи применяют термин "база данных" к понятию "приложение для работы с базами данных", но в этой книге термин "база данных" означает "структурированный набор реляционных данных, которые хранятся в SQL Server 2000".
Об авторах
Джеффри П. Мак-Манус (Jeffrey P. McManus) —
разработчик и автор, специализирующийся на программных продуктах Microsoft. Как разработчик, он занимался созданием оперативных приложений на основе Internet-ориентированных и клиент-серверных технологий. Он автор четырех книг, включая предыдущее издание этой книги — бестселлер
Обработка баз данных на Visual Basic® 6,
а также две книги, посвященные .NET-ориентированным технологиям. Джеффри регулярно участвует в конференциях VBITS/VSLive, European DevWeek и VBConnections.
Джеки Голдштейн (Jackie Goldstein) —
президент компании Renaissance Computer Systems, которая специализируется на создании приложений и предоставлении консультаций в области программных продуктов и технологий Microsoft. Более 18 лет он участвует в создании и сопровождении программных продуктов в США и Израиле, а также обладает огромным опытом оказания консультационных услуг и интеграции новых технологий. Джеки является региональным директором MSDN в Израиле, основателем израильской группы пользователей Visual Basic (VB User Group). Он регулярно выступает на международных конференциях разработчиков, включая VSLive!, TechEd, VBITS, Microsoft Developer Days и SQL2TheMax. Он также работал с компанией Microsoft в качестве эксперта по основным вопросам рецензирования, усовершенствования и завершения технических материалов и презентаций для всемирных конференций Microsoft Developer Days.
ГЛАВА 1
Основы построения баз данных
Сердцем многих приложений, работающих в сфере бизнеса, являются базы данных. Своим широким распространением они обязаны возможности централизованного доступа к информации, который характеризуется последовательностью, эффективностью и относительной простотой создания и поддержки. В этой главе рассматриваются основы создания и поддержки баз данных, предназначенных для ведения бизнеса, т.е. здесь вы узнаете, что собой представляет база данных и как ее можно использовать для принятия решений в сфере бизнеса.
Если вы уже работали с языком Visual Basic и программировали доступ к базам данных, то материал этой главы может показаться вам довольно тривиальным. Однако не стоит пропускать ее, поскольку здесь вы найдете профессиональные термины, которые могут меняться при переходе от одной системы управления базами данных (СУБД) к другой.
Несмотря на относительное постоянство концепций, лежащих в основе различных СУБД, одни и те же вещи имеют обыкновение называться по-разному при переходе от одной конкретной реализации к следующей. Например, многие программисты, разрабатывающие приложения клиент/сервер, называют
запросы
(
query)
, хранимые в контейнере базы данных,
представлениями (view),
а программисты, работающие в среде Visual Basic или Access, называют их
запросами
или
объектами
QueryDef. По своей сути это одно и то же.
Если вы переходите к Visual Basic .NET от предыдущей версии Visual Basic, то вам следует познакомиться с некоторыми новыми возможностями программирования баз данных с помощью Visual Basic .NET. Дело в том, что в ней используется фундаментально другой способ доступа к данным, который отличается от способов доступа к данным в прежних версиях Visual Basic. Он основан на стандартах Internet с прицелом на создание приложений с возможностями удаленного доступа к данным. Интегрированная среда разработки Visual Studio .NET содержит огромный набор визуальных и интуитивно понятных инструментов, которые упрощают и ускоряют процесс создания баз данных и обеспечивают более высокую степень взаимодействия. Ранее для создания и поддержки баз данных необходимо было иметь глубокие знания многих инструментов. С помощью Visual Studio .NET разработчик может обратиться к многочисленным программам-мастерам, что позволяет избежать создания рутинного кода и повысить гибкость создаваемых приложений.
Если же вы не понаслышке знакомы с разработкой баз данных в прежней версии Visual Basic 6.0, возможно, вам имеет смысл забежать вперед и перейти к главе 4, "Модель ADO.NET: провайдеры данных", посвященной новым способам доступа к данным в Visual Basic .NET.
Что представляет собой база данных
База данных (database) —
это своего рода камера хранения информации. Поскольку существуют различные типы баз данных, необходимо отметить, что в данной книге рассматриваются
реляционные базы данных,
как самый распространенный в настоящее время тип баз данных. Реляционные базы данных обладают следующими возможностями:
• сохраняют данные в
таблицах,
которые, в свою очередь, состоят из строк, называемых здесь
записями,
и столбцов, называемых здесь
полями;
• позволяют считывать подмножества данных из таблиц (или создавать для них
запросы);
• позволяют связывать таблицы друг с другом (или создавать
объединения)
для выборки связанных записей, хранимых в различных таблицах.
Что такое платформа базы данных
Основные функции базы данных обеспечиваются
платформой баз данных (database platform),
т.е. программной системой, "отвечающей" за способ хранения данных и их выборку.
Вместе с Visual Basic.NET можно использовать множество различных платформ баз данных, но в этой книге в основном рассматривается платформа Microsoft SQL Server 2000. (Более подробно она рассматривается в главе 3, "Знакомство с SQL Server 2000".)
Процессором базы данных (database engine)
называется сам механизм, лежащий в основе платформы базы данных и непосредственно "отвечающий" за выполнение функций и управление данными.
Бизнес-ситуации
Многие книги, посвященные компьютерному обеспечению, состоят из длинных списков программных средств с кратким описанием особенностей их работы. Если вам повезет, вы найдете описание того, как данный продукт связан с реальным миром.
Цель настоящей книги – представить программное обеспечение в терминах бизнес-решений. Поэтому каждая глава содержит несколько бизнес-вариантов, в которых некая фиктивная компания, столкнувшись с реальными проблемами в сфере бизнеса, пытается автоматизировать работу офиса. В приведенных бизнес-ситуациях используются наработки компании Jones Novelties Incorporated, которая занимается так называемым малым бизнесом — распространением сувениров, мелких дешевых товаров и организацией вечеринок.
Бизнес-ситуация 1.1: основные сведения о компании Jones Novelties Incorporated
Исполнительный директор компании Брэд Джонс сознает, что для процветания компании нужно автоматизировать большую часть проводимых операций. Джонс понимает, что в первую очередь необходимо реализовать такие подсистемы, которые отвечают за контакты с покупателями, складское хозяйство и выписку счетов, причем реализация проекта автоматизации должна максимально отражать специфику этого бизнеса и в то же время отличаться достаточной гибкостью, позволяя вносить потенциальные изменения, продиктованные временем.
Джонс полностью сознает, что успех работы компании во многом зависит от характера организации доступа к информации, и принимает решение использовать для управления информацией компании систему реляционных баз данных. Поэтому последующий материал главы посвящен описанию структуры и особенностей функционирования этой базы данных.
Таблицы и поля
Базы данных состоят из
таблиц,
которые представляют широкий диапазон категорий данных. Если когда-либо вам приходилось создавать базу данных, например для обработки отчетных материалов в бизнесе, то вы могли создать одну таблицу для хранения информации о клиентах, другую – о счетах, третью – о сотрудниках. Таблицы имеют заранее определенную структуру, и данные, хранящиеся в них, соответствуют этой структуре.
Таблицы содержат
записи —
отдельные частицы данных внутри широкой категории, которую они представляют. Например, таблица с клиентами содержит информацию обо всех потребителях товаров и услуг данной компании. Записи могут содержать данные практически любого типа. Они могут редактироваться, извлекаться и удаляться с помощью хранимых процедур и/или запросов на языке структурированных запросов (Structured Query Language — SQL).
Записи, в свою очередь, содержат поля. Поле — это некоторый раздел данных в записи. Например, запись, которая представляет некий элемент в адресной книге, может состоять из полей имени и фамилии, адреса, названия города, почтового индекса и номера телефона.
Для доступа к базам данных, таблицам, записям и полям можно использовать код Visual Basic .NET. Одна из новинок программирования баз данных в Visual Basic .NET заключается в строгой проверке
типов данных.
Например, в Visual Basic .NET предусмотрены новые методы getString() и getInt(), которые позволяют сократить объем вводимого программистом кода и автоматически форматируют извлекаемые данные согласно их типу.
Проектирование базы данных
Для создания базы данных в первую очередь нужно определить, какого рода информацию ей предстоит отслеживать. Затем можно приступать к проектированию, создавая таблицы, состоящие из полей, которые определяют типы хранимых данных. После создания структуры базы данных можно сохранять данные в виде записей.
Однако невозможно добавлять данные в базу данных, которая не имеет таблиц или определений полей, поскольку в этом случае негде хранить данные. Отсюда следует, что проектирование базы данных имеет решающее значение для эффективности ее работы, в частности потому, что структура базы данных после ее реализации порой тяжело поддается изменениям.
В этой книге таблицы представлены в стандартном схематичном формате. В верхней части схемы приводится имя таблицы, а под ним — список названий полей.
Многоточие, использованное вместо последнего имени поля, означает, что эта таблица имеет одно или несколько полей, которые для краткости изложения опущены.
Бизнес-ситуация 1.2: проектирование таблиц и отношений
Брэд Джонс понял, что компании Jones Novelties Incorporated необходим способ сохранения информации о клиентах. Он совершенно уверен в том, что большинство его деловых контактов не будут однократными, и поэтому хочет иметь возможность связываться с постоянными клиентами, чтобы отсылать им каталоги два раза в год.
Размышляя таким образом за коктейлем, Брэд начертил на салфетке первую схему базы данных. "Итак, – подумал он, – чтобы поддерживать контакты с клиентами, мне нужно хранить следующие данные:
• имя клиента, его адрес, город, штат, почтовый индекс и телефонный номер;
• территориальный регион страны (северо-запад, юго-запад, средний запад, северо-восток, юг или юго-восток);
• дату последней покупки клиента".
Манипулирование данными с помощью объектов
После создания таблиц можно приступить к манипуляциям с данными: вводить данные в таблицы, извлекать их из таблиц, проверять и изменять структуру таблиц. Для манипулирования структурой таблиц используются команды определения данных (более подробно они описываются в главе 2, "Запросы и команды на языке SQL"), а для манипулирования данными – объекты DataSet или DataReader платформы .NET.
Объект DataSet обычно представляет подмножество записей, которые извлекаются из базы данных. Оно концептуально аналогично таблице (а в некоторых случаях — группе связанных полей), но также содержит несколько важных собственных свойств. Объекты DataSet можно легко представить в виде XML-данных и использовать для передачи удаленных данных (как, например, при передаче результатов выполнения запроса от сервера к клиенту или при обмене данными между двумя серверами). В Visual Basic .NET объекты DataSet не ограничены только сохранением извлеченных данных. Например, объект DataSet может использоваться для управления статическими данными в XML-документе или файле конфигурации, либо для управления динамическими данными, созданными на основе пользовательских данных в более сложных ситуациях.
Как и при работе с технологией ADO, в Visual Basic .NET и ADO.NET можно использовать подключенные и неподключенные объекты DataSet. Неподключенный объект DataSet с данными передается приложению, соединение с базой данных закрывается, а базе данных ничего не известно о манипуляциях с этими данными до тех пор, пока приложение вновь не обратится к базе данных. Допустим, что пользователь открывает форму и щелкает на кнопке для обновления данных. В таком случае приложение должно снова соединиться с базой данных и выполнить код изменения данных. В то же время с помощью подключенного объекта DataSet используемые данные "блокируются" и все изменения данных мгновенно воспроизводятся в базе данных. Эта технология более подробно рассматривается в главе 5, "ADO.NET: объект DataSet".
Объект DataReader работает аналогично объекту DataSet, но обладает другими возможностями и характеристиками производительности. Одно из отличий отражено в его названии: объект DataReader
Для простоты (что также рекомендуется делать на практике) в данной книге объект DataReader используется для выполнения базовых операций доступа к данным, а объект DataSet — только в случае крайней необходимости, например для создания Web-служб (более подробно они рассматриваются в главе 12, "Web-службы и технологии промежуточного уровня").
Типы данных
Один из этапов проектирования базы данных заключается в объявлении
типа
каждого поля, что позволяет процессору базы данных эффективно сохранять и извлекать данные. В SQL Server предусмотрено использование 21 типа данных, которые перечислены в табл. 1.1.
Таблица 1.1. Типы данных в SQL Server
Хотя типы данных Visual Basic.NET более близки к типам данных полей SQL Server, чем типы данных Visual Basic 6, между ними все равно нет однозначного соответствия. Например, тип данных int в SQL Server соответствует типу integer в Visual Basic .NET, потому что оба они являются 32-битовыми целыми числами. Однако в SQL Server нельзя создать поле с определенным пользователем типом или типом Object языка Visual Basic .NET.