Упрощаем работу с помощью простой и эффективной модели программирования

SQL Management Objects (далее SMO), новый программируемый уровень в SQL Server 2005, дополняет и заменяет SQL Distributed Management Objects (SQL-DMO). В этой статье я представлю SMO и покажу, как его использовать. Речь пойдет о применении Visual Studio 2005 и SMO для разработки управляемого кода и решения трех основных задач администрирования SQL Server 2005. Мы построим простое приложение для резервного копирования, доработаем его с целью облегчения использования, а затем создадим базу данных и таблицу. Основываясь на этом коде, читатели смогут задействовать его в качестве фундамента для обработки более сложных задач. SMO обеспечивает программный подход к полной объектной модели SQL Server. Любая работа, выполняемая на языке data definition language (далее DDL), теперь может выполняться на объектно-ориентированном языке управляемого кода для Common Language Runtime (CLR) (то есть .NET). Создавать приложения с помощью SMO и Visual Studio 2005 намного легче, чем в традиционных Notepad и SQL-DMO. Кроме того, в этой статье я покажу, каким образом возможности Visual Studio помогают уменьшить количество ошибок при программировании и повышают вероятность того, что решение правильно заработает с первого раза.

Enterprise Manager (и SQL Server Management Studio в SQL Server 2005) имеет все возможности для управления несколькими серверами, но администраторы баз данных, управляющие группой серверов, поняли, что решения, программные или на базе сценариев, при помощи SQL-DMO не только лучше выполняют работу, обеспечивая гарантию и повторяемость результатов, но и не требуют вмешательства оператора.

SMO предлагает большую производительность и масштабируемость, чем SQL-DMO. SQL-DMO остается в SQL Server 2005 только для обратной совместимости. SMO дает полный доступ ко всем свойствам SQL Server 2005. SMO можно использовать для управления SQL Server 2000 и SQL Server 7.0. К тому же, поскольку SMO выполнен как управляемый код CLR, можно легко и быстро разрабатывать устойчивые решения, использующие объектно-ориентированное программирование.

Несмотря на то что существует возможность использования любого текстового редактора для написания управляемого кода, Visual Studio 2005 предлагает высокопроизводительную среду для быстрого прикладного программирования. Visual Studio 2005 ускоряет разработку приложений SMO, поскольку располагает стандартными шаблонами, такими как шаблоны для приложений Windows Forms, для ASP.NET Web Form и Web-служб, консольных приложений и служб Windows. Если использовать шаблон для разработки приложений SMO, на кодирование тратится меньше усилий, потому что в шаблоне есть написанный заранее «примерный» код, который связывает части приложения друг с другом.

Я надеюсь, что читатели уже знакомы с какой-либо версией Visual Studio и SQL Server. Тем более неплохо было бы знать, как использовать Visual Studio для разработки простых приложений Windows. Примеры в этой статье созданы в Visual Basic .NET и C#, но если читатели раньше работали с Visual Basic, C++ или Java, все должно быть понятно.

Основы объектно-ориентированной модели программирования

Прежде всего коротко рассмотрим некоторые определения в терминологии объектно-ориентированного программирования. Библиотека — это совокупность классов. Класс — описание объекта. Объект — экземпляр класса. Например, проект дома — это класс (абстракция), а дом, построенный по проекту, — это объект. Почти так же, как и дом, объект «сделан из проекта». Объект должен обрабатываться (создаваться) из класса. Каждый объект — это определенный экземпляр класса. Класс имеет свойства, методы и события, которые доступны для использования объектами, создаваемыми из этого класса. Все свойства, методы и события объекта определены классом. Свойство — это признак, который определяет или описывает объект. Например, некоторые из многих свойств объекта базы данных — это имя, размер и дата создания. Методы, такие как create, alter, drop и grant, являются операциями, связанными с объектом. События — это случаи, которые перехватываются объектом и могут использоваться, чтобы вызвать действие. Например, щелчок по кнопке в форме Windows вызывает событие Button Click. Требуется написать собственный код, чтобы обработать событие и предпринять некоторое действие, например восстановление предшествующего состояния базы данных. Эти принципы объектно-ориентированного программирования можно будет видеть в примерах данной статьи. Я объясню некоторые концепции объектно-ориентированного программирования немного позже, а сейчас приступим к созданию приложения для резервного копирования.

Построение приложения при помощи SMO

Мы начнем с построения приложения для резервирования базы данных AdventureWorks, новой базы данных, содержащей примеры SQL Server 2005. При наличии разнообразных инструментов для администраторов баз данных и трехуровневых приложений для резервного копирования напрашивается вопрос: зачем тратить время на программирование приложения, резервирующего базу данных? Представим реальную ситуацию, которая включает требования по загрузке данных при операциях между компаниями. В случае сбоев при загрузке данных необходимо автоматически вернуть базу данных в то состояние, в котором она была непосредственно перед загрузкой. Дело осложняется тем, что нет возможности заранее спланировать копирование, так как данные могут поступать от деловых партнеров в любое время. SMO позволяет разработать полностью автоматизированное решение, которое резервирует базу данных немедленно, после того как получаемые данные будут загружены

Начнем с запуска Visual Studio 2005. Нужно открыть меню и выбрать File, New, Project. Когда появится диалоговое окно New Project, следует выбрать Project Type и Template, то есть шаблон для проекта, как показано на экране 1, затем щелкнуть OK. Для этого примера я выбрал шаблон Console Application (как и sqlcmd и osql, он запускается в командном окне), поскольку он требует минимального количества кода для демонстрации объектно-ориентированного программирования при использовании библиотеки классов .NET Framework 2.0 (SMO — это часть .NET Framework 2.0). В дальнейшем, когда приложение для резервирования базы данных будет усовершенствовано, будет использоваться шаблон Windows Application, так как потребуется пользовательский интерфейс с широкими возможностями. Шаблон Windows Service является подходящим вариантом в том случае, когда от приложения требуется работа в фоновом режиме, как службы.

Экран 1. Окно New Project

Добавим ссылку на Microsoft.SqlServer.Smo, то есть на библиотеку классов CLR. Нужно зайти в меню Project и выбрать Add Reference. В диалоговом окне Add Reference, которое показано на экране 1, следует щелкнуть на закладке .NET, выбрать Microsoft.SQLServer.Smo, затем щелкнуть OK. Появится окно с несколькими строками кода, которые предоставляет шаблон Console Application. Необходимо удалить весь исходный код в окне, затем вставить код Visual Basic .NET, который показан в листинге 1, или код C# в листинге 2. Это весь код, необходимый для резервирования базы данных AdventureWorks. Все просто.

Заметим, что несохраненные изменения отмечены желтым цветом в крайнем левом поле окна кода. Можно сохранить изменения сейчас, но это не обязательно. При запуске приложения Visual Studio 2005 автоматически сохраняет изменения, и желтые отметки меняются на зеленые. Но перед запуском приложения SQLBackup я рекомендую сначала изучить и осмыслить код. Примеры в листингах 1 и 2 иллюстрируют несколько важных концепций объектно-ориентированного программирования.

Приложение в Visual Studio 2005 запускается так же, как запрос в SQL Server 2000 Query Analyzer. Запуск начинается со щелчка на значке Start (зеленый треугольник) или нажатия кнопки F5. Окно Console появляется при запуске приложения, и, когда оно исчезает (примерно через минуту), резервная копия базы данных готова.

Для подтверждения того, что резервный файл базы данных был создан с именем C:AdventureWorks.bak, можно использовать Windows Explorer.

Экран 2. Ссылка на Microsoft.SqlServer.Smo на закладке .NET в окне Add Reference

Некоторые разъяснения концепций

Мы начали с предложения Imports в тексте кода Visual Basic .NET в листинге 1 или с предложения using в коде C# в листинге 2. Добавление этих предложений в начало кода позволяет использовать укороченную нотацию. Несмотря на то что это предложение технически необязательное, оно рекомендуется для обеспечения скорости и аккуратности. Например, если предложение опустить, придется ввести строку BackupActionType.Database as Microsoft.SqlServer. Management.Smo.BackupActionType.Database.

Необходимо использовать конструктор объекта (метод New в Visual Basic .NET или новый метод в C#) для создания (инициализации) реального объекта как выделенного из абстрактного определения, которое имеется в библиотеке класса (такой, как библиотека классов SMO). Конструктор, имеющий более одной формы, называется перезагруженным. Каждая форма перезагруженного конструктора имеет свою сигнатуру, иначе говоря, каждый конструктор имеет уникальный набор параметров. Функция IntelliSense Visual Studio помогает решить, какую перезагрузку применить, показывая все варианты перезагрузки конструктора.

В объектно-ориентированном программировании после создания экземпляра объекта обычно задаются некоторые из свойств объекта. Это несложное приложение для резервирования базы данных устанавливает четыре свойства: тип резервирования, имя набора копирования, название базы данных для копирования и тип устройства резервирования. Нужно вызывать методы объекта, чтобы подвигнуть объект на совершение действия. Наше приложение использует метод Add объекта Backup для добавления полного имени резервного файла в набор элементов Backup. Объекту Server предписано установить соединение. Последний шаг вызывает метод SqlBackup объекта Backup, чтобы выполнить реальное копирование.

Преимущества Visual Studio 2005

Visual Studio обеспечивает две возможности, которые существенно повышают скорость и качество программирования: IntelliSense и контекстно-зависимая подсказка. IntelliSense значительно упрощают разработку кода, если сравнивать с написанием сценариев SQLDMO в Notepad. В процессе кодирования текста IntelliSense обеспечивает перечень и краткое описание свойств и методов объекта SQLBackup, как показано на экране 3. Чтобы получить контекстную подсказку о коде, в котором находится курсор, нужно нажать клавишу F1.

Модернизация SMO Backup

Наше приложение создает резервную копию базы данных, однако у него есть два явных недостатка: имя базы данных жестко запрограммировано и отсутствует возможность проверки резервной копии. Для устранения этих недостатков необходимо немного модернизировать приложение, предоставив пользователю возможность выбора имени базы данных из списка, и проверить резервную копию, создавая экземпляр объекта Restore и вызывая метод Verify.

Освоив основы разработки приложения при помощи Visual Studio 2005, создадим приложение, которое имеет пользовательский интерфейс Windows. Приложения Windows требуют значительного большего объема кода, чем приложения консоли. При разработке нового проекта будет использоваться шаблон Windows Application. Visual Studio 2005 автоматически добавляет необходимый для проекта дополнительный код. В отличие от ранних версий Visual Studio, Visual Studio 2005 сохраняет автоматически разработанный код в отдельном от написанного пользователем кода файле. В Visual Basic .NET этот файл называется formname.Designer.vb. В C#, он носит название formname.Designer.cs. Файл по умолчанию скрыт. Чтобы увидеть файл в Solution Explorer, нужно выбрать режим Show All Files. Код в файле Designer не придется изменять вручную, он изменится автоматически, когда в форму добавятся новые элементы управления. Код, написанный пользователем, включен либо в файл formname.vb, либо в formname.cs. Если оставить имя формы по умолчанию, Form1, файл с кодом будет называться Form1.vb или Form1.cs.

В Visual Studio 2005 в меню выберем File, New, Project. Затем нужно указать шаблон Windows Application для предпочитаемого языка. Выберем VerifiedBackup как имя проекта. Visual Designer появляется вместе с пустым объектом Form. Используя Toolbox, переместим элемент Button и элемент ListBox в форму. Используя окно Properties, присвоим элементу ListBox имя Databases, а элементу Button имя DoBackup с помощью свойства Text в Backup. Как и в предыдущем примере, добавим ссылку на Microsoft.SqlServer.Smo. Кроме того, нужно добавить ссылку на Microsoft.SqlServer.ConnectionInfo. Дважды щелкнем на элементе Button для создания программы обработки события для кнопки и для того, чтобы переключиться в режим просмотра кода Code View. Экран теперь должен выглядеть так, как показано на экране 4.

Экран 4. Модернизированное приложение резервного копирования в Visual Designer

Затем можно создать более удобное приложение для резервного копирования, предоставив пользователю перечень имен баз данных для выбора. Улучшим приложение SqlBackup добавлением кода в обработчик события Form Load, который будет заполнять объект ListBox именами баз данных на сервере. При копировании базы данных теперь пользователь может просто выбрать базу данных из списка и нажать Backup. Наконец, для того чтобы проверить копию, добавим объект Restore, а чтобы предоставить пользователю возможность проверки состояния резервной копии — управляющий элемент MessageBox. В листингах 3 и 4 показано, как это сделать.

Как и ранее, можно заменить весь код в Form1.vb на код листинга 3 или заменить код в Form1.cs на код листинга 4. Сначала требуется дважды щелкнуть на управляющем элементе Form и управляющем элементе Button для регистрации обработчиков событий в файле кода Visual Designer. Следует убедиться, что для Form, ListBox и Button используются управляющие имена Form1, Databases и DoBackup, в соответствии с текстом примеров этой статьи. Нельзя забывать и о том, что C# является языком, чувствительным к регистру, поэтому doBackup и DoBackup представляют различные объекты.

Для упрощения кодирования и для того, чтобы избежать ошибок, можно загрузить готовое решение и работать с ним. После загрузки кода следует дважды щелкнуть на файлах vbproj или csproj для загрузки в Visual Studio 2005. В установках файла могут появиться сообщения об ошибке, такие как The automatically saved settings file ?%user_documents%visualstudiosettingsvisualstudio8.0currentsettings.vssettings? cannot be found. Нужно нажать OK. Эти сообщения можно игнорировать, так как Visual Studio создает данные установки, когда проект загружается в Visual Studio.

Теперь запустим модернизированное приложение для резервного копирования. Следует нажать F5 или значок Start (зеленый треугольник). Выберите базу данных, затем щелкните Backup. Как показано на экране 5, когда копия готова, появляется окно, показывающее статус копии. В третьем примере будет показано, как, используя SMO, создать базу данных и таблицу.

Экран 5. Проверка резервной копии

Разработка базы данных и таблицы с помощью SMO

Много лет разработчики баз данных использовали программный код для автоматического создания таблиц. Общий подход заключался в создании строки, состоящей из предложения T-SQL, CREATE TABLE, которое посылается на исполнение серверу базы данных. SMO предлагает более ясный, удобный объектно-ориентированный способ разработки объектов баз данных прямо в тексте программы, без использования в качестве посредника T-SQL.

В листингах 5 и 6 показано, как создать новую базу данных и таблицу полностью в тексте программы, без написания каких-либо предложений на T-SQL. Мы используем объект Database для создания базы данных и объект Table — для составления таблицы. Чтобы сохранить простоту программирования, следует выбрать шаблон Console Application и назвать его CreateTable. Можно добавить код к другим шаблонам, в зависимости от типа выбираемого пользовательского интерфейса. Затем добавим ссылки на Microsoft.SqlServer.Smo и на Microsoft.SqlServer.ConnectionInfo. Теперь запустим приложение. Необходимо использовать SQL Server Management Studio для проверки вновь созданных баз данных и таблиц. Если SQL Server Management Studio уже запущен, возможно, понадобится сначала щелкнуть на значке Refresh в Object Explorer.

Используйте преимущества SMO

Как было показано на трех примерах, программировать при помощи SMO и Visual Studio 2005 просто и удобно. SMO и Visual Studio 2005 предлагают администраторам баз данных и разработчикам непревзойденную гибкость при создании многочисленных приложений для работы с базой данных, а кроме того, обеспечивают снижение сложности и времени разработки с более высокой производительностью, лучшей масштабируемостью и большим количеством свойств, чем SQL-DMO. SMO в SQL Server 2005 также имеет обратную совместимость с SQL Server 2000 и SQL Server 7.0.

Джон Пол Кук - Архитектор систем и баз данных из Хьюстона, Техас. Специализируется на помощи крупным компаниям и пользователям в работе с SQL Server, Oracle, и .NET Framework. Имеет несколько сертификатов Microsoft и Oracle. johnpaulcook@email.com