Проект базы данных — это особый тип проекта Visual Studio .NET, предназначенный для создания и управления SQL-сценариями баз данных.
Чтобы разработка приложений для работы с базами данных была проще и удобнее, в последнюю версию Visual Studio .NET включено множество новых полезных инструментов, а также усовершенствованных прежних инструментов, которые присутствовали в ранних версиях программы.
Инструменты Visual Studio .NET для работы с базой данных позволяют пользователю, не выходя за пределы среды Visual Studio .NET, быстро создавать, изменять и тестировать объекты баз данных: таблицы, представления, запросы, хранимые процедуры и т.д. Главное достоинство данного продукта состоит в существенном повышении эффективности проектирования и создания программных продуктов. Кроме того, значительно упростилась установка и лицензирование программы.
Некоторые из рассмотренных далее инструментов описаны в предыдущих главах, а их использование часто имеет интуитивно понятный характер. Многие инструменты должны быть хорошо известны пользователям, которые имеют опыт работы с базами данных Microsoft Access. Тем же, кто сталкивается с такими инструментами впервые, будет полезно познакомиться со справочными материалами Visual Studio .NET.
В этой главе описываются способы применения инструментов проекта базы данных Visual Studio .NET для работы с базами данных.
Проект базы данных Visual Studio.NET предназначен для разработки, тестирования и выполнения сценариев и запросов SQL, а также для управления ими. Этот проект не связан напрямую ни с одним из .NET-совместимых языков программирования, например Visual Basic или С#. При разработке многоуровневого приложения данный тип проекта упрощает процесс проектирования и создания уровня базы данных, а также управления им.
В одних приложениях проект базы данных может быть частью кода приложения, а в других — отдельным администрирующим решением, которое используется для установки и сопровождения базы данных создаваемого приложения.
Для включения проекта базы данных в решение Visual Studio .NET выполните перечисленные ниже действия.
1. Откройте диалоговое окно Add New Project (Создать новый проект), выбрав команду меню File→Add Project→New Project (Файл→Создать проект→Новый проект) или щелкнув правой кнопкой мыши на названии решения в окне Solution Explorer и выбрав в контекстном меню команду Add→New Project (Создать→Новый проект).
2. В левой части Project Types (Типы проектов) диалогового окна Add New Project найдите каталог Other Projects (Другие проекты) и раскройте его, щелкнув на пиктограмме с изображением знака "плюс".
3. Выберите каталог Database Projects (Проекты баз данных), а затем выберите шаблон Database Project (Проект баз данных) в правой части окна Templates (Шаблоны).
4. В текстовом поле Name (Имя) укажите имя проекта NoveltyData, в текстовом поле Location (Расположение) укажите путь к файлам проекта, а затем щелкните на кнопке OK.
5. На экране отобразится диалоговое окно SQL Server Login (Регистрация в SQL Server) с предложением выбрать используемый сервер баз данных и ввести учетное имя и пароль. В списке Server (Сервер) выберите сервер (local) и установите флажок параметра Trusted Connection (Доверительное подключение).
6. Если ранее в окне Server Explorer не были определены никакие подключения к базе данных, то на экране отобразится диалоговое окно Data Link Properties (Свойства подключения к базе данных), в котором можно определить новое подключение к базе данных.
7. Если в окне Server Explorer уже определено хотя бы одно подключение к базе данных, то на экране появится диалоговое окно Add Database Reference (Создать ссылку на базу данных). В списке имеющихся ссылок выберите нужную ссылку или щелкните на кнопке Add New Reference (Создать новую ссылку), чтобы открыть диалоговое окно Data Link Properties (Свойства подключения к базе данных), в котором можно определить новое подключение к базе данных.
8. В списке имеющихся ссылок выберите ссылку на базу данных Novelty и щелкните на кнопке OK. (Если этой ссылки все же нет, ее придется создать, щелкнувна кнопке Add New Reference.)
9. На рис. 8.1 показан итоговый вид созданного проекта и его подчиненных папок в окне Solution Explorer.
РИС. 8.1. Итоговый вид проекта NoveltyData в окне Solution Explorer
Обратите внимание на то, что проект NoveltyData содержит следующие папки:
• Change Scripts (Сценарии изменения данных);
• Create Scripts (Сценарии создания данных);
• Queries (Запросы);
• Database References (Ссылки на базы данных).
Рассмотрим подробнее эти папки и их содержимое. Начнем с папки Database References, потому что с нее начинается любая работа с базами данных.
Ссылка на базу данных является указателем на нее, но она не позволяет осуществлять доступ к объектам базы данных и их просмотр, так как за это отвечает подключение к базе данных.
Ссылка на базу данных — это хранимая на жестком диске часть проекта базы данных. При открытии проекта она автоматически считывается для учета всех определенных в окне Server Explorer подключений к базам данных и поиска соответствующего ссылке подключения. Если указанного подключения нет, то ссылка автоматически создает его.
Первая определенная ссылка на базу данных становится для данного проекта используемой по умолчанию. Поэтому все сценарии и запросы проекта по умолчанию будут выполняться именно для этой ссылки на базу данных.
Пиктограмма используемой по умолчанию ссылки на базу данных содержит красную, зеленую или белую стрелку ярлыка, а все пиктограммы всех других ссылок на базы данных содержат черную или белую стрелки.
Для указания другой ссылки в качестве используемой по умолчанию следует щелкнуть на нужной ссылке и в контекстном меню установить флажок Set as Project Default (Использовать по умолчанию).
Для создания новых ссылок на базы данных щелкните правой кнопкой мыши на папке Database References (Ссылки на базы данных), а затем выберите в контекстном меню команду New Database Reference (Создать ссылку на базу данных).
Можно одновременно создать ссылку на базу данных и указать ее в качестве используемой по умолчанию. Для этого щелкните правой кнопкой мыши на названии проекта базы данных в окне Solution Explorer и выберите в контекстном меню команду Set Default Reference (Указать используемую по умолчанию ссылку). На экране появится диалоговое окно Set Default Reference (Указать используемую по умолчанию ссылку), нового подключения к базе данных ссылка на него включается в проект;и впредь используется по умолчанию.
Шаблон проекта базы данных автоматически создает две папки для хранения сценариев SQL. Папка Create Scripts (Сценарии создания данных) содержит сценарии SQL, которые отражают предполагаемые изменения в базе данных. Изменения могут быть отложены, так как разработчик не имеет достаточных полномочий для изменения рабочей базы данных (иногда это бывает весьма полезно) или несколько изменений предполагается объединить и внести одновременно.
Любой сценарий SQL можно создать вручную, щелкнув правой кнопкой мыши на имени папки (или имени проекта) в окне Solution Explorer, а затем выбрав в контекстном меню команду Add New Item (Создать новый элемент) или Add SQL Script (Создать сценарий SQL). Выбрав один из стандартных шаблонов сценариев (рис. 8.2), их можно отредактировать вручную в редакторе Visual Studio .NET.
Хотя имена каталогов даются в соответствии с принятым соглашением об именах, их все же можно изменить. Однако при этом следует учитывать вероятность того, что это может запутать других разработчиков проекта.
В проект базы данных можно включить другие папки. Например, отдельную папку можно создать для хранения сценариев обновления базы данных до указанной версии или для других видов действий. Аналогично, можно создать разные папки для хранения запросов разного типа. Для создания новой папки в проекте базы данных щелкните правой кнопкой мыши на имени проекта и выберите в контекстном меню команду New Folder (Создать папку).
РИС. 8.2. Стандартные шаблоны сценариев SQL в диалоговом окне Add New Item
Следует отметить, что сценарии создания и изменения данных могут создаваться автоматически.
Сценарии создания данных можно генерировать только в SQL Server 2000 или Server 7.0. Более для их использования на компьютере с Visual Studio .NET нужно установить клиентские инструменты SQLServer.
Как уже упоминалось ранее, папка Create Scripts содержит сценарии создания новых объектов базы данных, включая таблицы, представления, хранимые процедуры и ограничения. Обычно они используются для создания сценариев установки рабочей базы данных или возвращения тестовой базы данных к исходному состоянию.
Для генерации сценариев создания данных выполните перечисленные ниже действия.
1. Откройте окно Server Explorer и щелкните правой кнопкой мыши на элементе, для которого предполагается создать сценарий. Этим элементом может быть вся база данных или отдельный объект (таблица, представление, хранимая процедура или функция). В этом примере следует выбрать базу данных Novelty.
2. Выберите в контекстном меню команду Generate Create Script (Генерировать сценарий создания данных). При условии успешного ввода учетной записи и пароля на предыдущем этапе создания ссылки на эту базу данных на экране отобразится диалоговое окно Generate Create Scripts (Генерировать сценарии создания данных).
3. Диалоговое окно Generate Create Scripts будет сконфигурировано только для избранного объекта. Например, после выбора базы данных Novelty оно будет иметь такой вид, как на рис. 8.3, с отображением всех объектов этой базы данных, но еще без выбора отдельных объектов для работы с генерируемым сценарием.
Рис. 8.3. Диалоговое окна Generate Create Scripts для базы данных Novelty
4. Во вкладке General (Общие) можно указать объекты, включаемые в генерируемый сценарий, выбрав один или несколько объектов в списке Objects on Novelty (Объекты базы данных Novelty) и щелкнув на кнопке Add (Включить в сценарий) либо дважды щелкнув на выбранном объекте. Для включения в сценарий целой группы объектов, например всех объектов одного типа, т.е. всех таблиц или всех представлений, нужно установить соответствующий флажок, т.е. Script all Objects (Включить все объекты), All tables (Все таблицы), All views (Все представления) и т.д. В данном примере выберите флажок Script all objects.
5. Выберите вкладку Formatting (Форматирование) и, помимо указанных по умолчанию параметров, установите флажок Include descriptive headers in the script files (Включить в сценарий описательные заголовки).
6. Щелкните на кнопке OK, и на экране появится диалоговое окно Browse for Folder (Выбор папки), где необходимо выбрать папку, в которой следует сохранить файл генерируемого сценария. Обратите внимание, что по умолчанию выбирается папка Create Scripts текущего проекта, хотя ее, конечно, можно выбрать по своему желанию. В данном примере используется предлагаемая по умолчанию папка Create Scripts. Для продолжения работы щелкните на кнопке OK.
РИС. 8.4. Итоговый вид окна Solution Explorer с файлами сценариев для базы данных Novelty
Поскольку в диалоговом окне Generate Create Scripts были выбраны все объекты базы данных, то в проект базы данных будет включено несколько файлов сценария, как показано на рис. 8.4. Учтите, что данный сценарий можно включить в один файл. Для этого нужно во вкладке Options (Параметры) диалогового окна Generate Create Scripts выбрать в группе Files to Generate (Генерировать файлы) переключатель Create one file (Создать один файл).
Устанавливая флажок Script database (Сгенерировать сценарий базы данных) во вкладке Options диалогового окна Generate Create Scripts, можно даже сгенерировать сценарий создания самой базы данных. В этом примере проект базы данных NoveltyData содержит набор сценариев для создания всех объектов базы данных Novelty бы применения этих сценариев демонстрируются в следующих разделах.
8. Для просмотра (или изменения) содержимого файла сценария дважды щелкните на нем в окне Solution Explorer. На рис. 8.5 показано содержимое сценария dbo.tblOrder.tab, который создает таблицу tblOrder в базе данных Novelty.
Обратите внимание на то, что эти сценарии создают только схему базы данных, но не вставляют в созданные таблицы никаких данных. Способы копирования данных в таблицы будут показаны далее в разделе о командных файлах.
РИС. 8.5. Содержимое сгенерированного сценария создания таблицы tblOrder
Для внесения изменений в существующую схему базы данных используются сценарии изменения данных. Хотя они могут создаваться вручную, все же предпочтительнее для этого использовать специальные инструменты. В главах 1, "Основы построения баз данных", и 2, "Запросы и команды на языке SQL", рассматриваются инструменты Visual Studio .NET, предназначенные для работы с базой данных. Они способны автоматически создавать сценарий для любых изменений схемы базы данных.
Допустим, требуется создать новое поле StartDate в таблице tblEmployee для даты зачисления каждого сотрудника. Для этого выполните перечисленные ниже действия.
1. В окне Server Explorer раскройте папку Tables базы данных Novelty и щелкните правой кнопкой мыши на таблице tblEmployee.
2. Выберите в контекстном меню команду Design Table (Создание таблицы) для перехода в режим конструктора таблицы.
3. Создайте новое поле StartDate и укажите для него тип данных datetime, как показано на рис. 8.6.
Чтобы внести данное поле во все уже инсталлированные и доставленные базы данных в географически разных местах, потребуется создать сценарий изменений. Для этого выполните перечисленные ниже действия.
1. Выберите команду меню Diagram→Generate Change Script (Диаграмма→Генерация сценария изменения) или щелкните на кнопке Generate Change Script (Генерация сценария изменения) в панели инструментов. На экране появится диалоговое окно Save Change Script (Сохранение сценария изменения) с областью предварительного просмотра текста сценария (рис. 8.7).
РИС. 8.6. Создание нового поля StartDate в таблице tblEmployee
РИС. 8.7. Диалоговое окна Save Change Script с содержимым сценария вставки поля StartDate в таблицу tblEmployee
2. Щелкните на кнопке Yes, и на экране появится стандартное диалоговое окно Save As (Сохранить как) с предложением сохранить данный сценарий в папке Change Scripts текущего проекта базы данных.
3. Щелкните на кнопке Save для сохранения сценария с принимаемым по умолчанию именем tblEmployee.sql.
4. Закройте режим конструктора таблицы и в ответ на предложение сохранить внесенные изменения щелкните на кнопке No. В следующем разделе описываются способы внесения изменений с помощью запуска только что созданного сценария SQL.
5. Щелкните дважды на сценарии tblEmployee.sql для просмотра содержимого сохраненного файл сценария, которое показано на рис. 8.8.
РИС. 8.8. Просмотр содержимого файла сценария tblEmployee.sql
(Учтите, что вместо учетного имени sa в строке User: sa может быть указано другое используемое вами учетное имя пользователя SQL Server, а вместо имени сервера HR426 в строке Server: HR426 — имя другого используемого вами сервера. — Прим. ред.)
Сценарий можно запустить непосредственно в окне Solution Explorer. Проще всего перетащить сценарий и опустить его на ссылку на базу данных, в которую нужно внести изменения. Или иначе, щелкните правой кнопкой мыши на сценарии и выберите в контекстном меню команду Run (Запустить) или Run On (Запустить для). Команда Run выполняет сценарий по отношению к используемой по умолчанию ссылке на базу данных, а команда Run On позволяет выбрать другую базу данных в одноименном диалоговом окне (рис. 8.9). Учтите, что, кроме выбора уже существующей ссылки на базу данных, можно создать совершенно новую ссылку. (Перед этим на экране появится диалоговое окно SQL Server Login для выбора сервера и регистрации на нем. — Прим. ред.)
РИС. 8.9. Диалоговое окно Run On
Для запуска сценария можно выбрать временную ссылку на базу данных. Щелкните дважды на последнем элементе
Для внесения изменений в базу данных с помощью сценария tblEmployee.sql выполните перечисленные ниже действия.
1. Убедитесь в том, что таблица tblEmployee не содержит поле StartDate. Для этого в окне Server Explorer раскройте папку таблицы tblEmployee для просмотра всех полей данной таблицы, как показано на рис. 8.10.
2. Раскройте папку Change Scripts в окне Solution Explorer и выберите сценарий tblEmployee.sql.
3. В окне Solution Explorer перетащите и опустите данный сценарий на ссылку на базу данных Novelty.
4. После этого на экране появится диалоговое окно Execute Scripts and Queries (Выполнить сценарии или запросы) для подтверждения запуска сценария для указанной базы данных. Щелкните на кнопке Yes для запуска сценария и продолжения работы.
5. Повторите действия, описанные в п. 1, чтобы вновь отобразить поля таблицы tblEmployee (или просто щелкните на кнопке Refresh в панели инструментов окна Server Explorer) для того, чтобы убедиться в наличии нового поля StartDate в таблице tblEmployee.
РИС. 8.10. Отображение полей таблицы tblEmployee
Создав большое количество сценариев создания и изменения разных объектов базы данных, неплохо объединить их в одной логической группе для одновременного запуска. Именно для этого в Visual Studio .NET предусмотрены командные файлы с расширением .cmd. Они могут использоваться в операционных системах Windows 2000 или Windows XP, которые способны распознать такие файлы. Например, командный файл можно применить для загрузки данных во вновь созданную таблицу, экспортируя данные из уже существующей базы данных.
Способность простого и автоматического создания сценария загрузки данных, помимо создания схемы и объектов базы данных, является именно тем компонентом среды Visual Studio .NET, которого нет в программе SQL Server Enterprise Manager.
Итак, попробуем создать один командный файл, чтобы автоматически запустить все сценарии для создания совершенно новой версии базы данных Novelty на другом компьютере. Хотя новая версия базы данных будет иметь собственные данные о клиентах, сотрудниках и заказах, данные о товарах в таблице tblInventory будут одинаковыми. Для этого в новой базе данных нужно наполнить таблицу tblInventory данными о товарах из уже существующей таблицы tblInventory.
Чтобы создать командный файл загрузки данных о товарах из существующей базы данных в новую, необходимо сначала экспортировать данные, а затем продолжить процесс создания командного файла.
1. В окне Server Explorer щелкните правой кнопкой мыши на таблице tblInventory и выберите в контекстном меню команду Export Data (Экспорт данных).
2. В диалоговом окне Browse for Folder выберите предлагаемую по умолчанию папку Create Scripts проекта базы данных и щелкните на кнопке OK.
3. После регистрации в диалоговом окне SQL Server Login будет создан файл dbo.tblInventory.dat.
4. Выберите папку в проекте базы данных для сохранения нового командного файла. В данном примере для этого используется предлагаемая по умолчанию папка Create Scripts.
5. В окне Solution Explorer щелкните правой кнопкой мыши на папке Create Scripts и выберите в контекстном меню команду Create Command File (Создать командный файл). На экране появится диалоговое окно Create Command File (рис. 8.11).
Рис. 8.11. Диалоговое окно Create Command File для базы данных Novelty
6. В списке Available Scripts (Доступные сценарии) в диалоговом окне Create Command File перечислены все сценарии SQL в выбранной папке, которые можно включить в командный файл. В список Scripts to be added to the command file (Сценарии, включаемые в командный файл) можно вставить все или только некоторые сценарии. Для включения всех сценариев щелкните на кнопке Add Аll (Включить все).
7. Поскольку в списке сценариев находится по крайней мере один сценарий экспорта данных с расширением. tab, в диалоговом окне Create Command File станет активной кнопка Add Data (Включить данные).
8. Щелкните на кнопке Add Data, и на экране отобразится одноименное диалоговое окно (рис. 8.12). В этом окне перечислены все выбранные сценарии создания таблиц и соответствующие им файлы данных.
РИС. 8.12. Диалоговое окно Add Data
9. В этом примере автоматически задается соответствие между файлом данных dbo.Inventory.dat и сценарием dbo.Inventory.tab. Для возвращения в диалоговое окно Create Command File щелкните на кнопке OK.
10. После указания сценариев и файлов данных щелкните на кнопке OK для создания командного файла. В результате этого в папке Create Scripts появится файл Create Scripts.cmd, содержимое которого показано в листинге 8.1.
@echo off
REM: Command File Created by Microsoft Visual Database Tools
REM: Date Generated: 8/29/2002
REM: Authentication type: Windows NT
REM: Usage: CommandFilename [Server] [Database]
if '%1' == '' goto usage
if '%2' == '' goto usage
if '%1' == '/?' goto usage
if '%1' == '-?' goto usage
if '%1' == '?' goto usage
if '%1' == '/help' goto usage
osql -S %1 -d Master -E -b -i "JACKIE-TECRA.Novelty.DBS"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d Master -E -b -i "Novelty.DBS"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblCustomer.tab"
if %ERRORLEVEL% NEQ 0 goto errors
bcp "%2.dbo.tblCustomer" in "dbo.tblCustomer.dat" -S %1 -T -k -n – q
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 %2 E -b -i "dbo.tblDepartment.tab"
if %ERRORLEVEL% NEQ 0 goto errors
bcp "%2.dbo.tblDepartment" in "dbo.tblDepartment.dat" -S %1 – Т -k – n – q
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 – d %2 – E -b -i "dbo.tblEmployee.tab"
if %ERRORLEVEL% NEQ 0 goto errors
bcp "%2.dbo.tblEmployee" in "dbo.tblEmployee.dat" – S %1 – Т -k – n -q
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblInventory.tab"
if %ERRORLEVEL% NEQ 0 goto errors
bcp "%2.dbo.tblInventory" in "dbo.tblInventory.dat" -S %1 -Т -k
if %ERRORLEVEL% NEQ 0 goto errors
osql – S %1 – d %2 – E – b -i "dbo.tblOrder.tab"
if %ERRORLEVEL% NEQ 0 goto errors
bcp "%2.dbo.tblOrder" in "dbo.tblOrder.dat" -S %1 -T -k -n -q
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblOrderItem.tab"
if %ERRORLEVEL% NEQ 0 goto errors
bcp "%2.dbo.tblOrderItem" in "dbo.tblOrderItem.dat" -S %1 -T -k -n -q
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblRegion.tab"
if %ERRORLEVEL% NEQ 0 goto errors
bcp "%2.dbo.tblRegion" in "dbo.tblRegion.dat" -S %1 -T -k -n -q
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblCustomer.kci"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblDepartment.kci"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblEmployee.kci"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tbllnventory.kci"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblOrder.kci"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblOrderItem.kci"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblRegion.kci"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblCustomer.fky"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblDepartment.fky"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblEmployee.fky"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblInventory.fky"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblOrder.fky"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblOrderItem.fky"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblRegion.fky"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblCustomer.ext"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblDepartment.ext"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblEmployee.ext"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblInventory.ext"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblOrder.ext"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblOrderItem.ext"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.tblRegion.ext"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.EmployeeDepartment_view.viw"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.qryEmployee_view.viw"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.DeleteEmployee.prc"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.GetCustomerFromID.prc"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.InsertEmployee.prc"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.LastNameLookup.prc"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.procEmployeesSorted.prc"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.SelectEmployees.prc"
if %ERRORLEVEL% NEQ 0 goto errors
osql -S %1 -d %2 -E -b -i "dbo.UpdateEmployee.prc"
if %ERRORLEVEL% NEQ 0 goto errors
goto finish
REM: How to use screen
:usage
echo.
echo Usage: MyScript Server Database
echo Server: the name of the target SQL Server
echo Database: the name of the target database
echo.
echo Example: MyScript.cmd MainServer MainDatabase
echo.
echo.
goto done
REM: error handler
:errors
echo.
echo WARNING! Error(s) were detected!
echo____________________
echo Please evaluate the situation and, if needed,
echo restart this command file. You may need to
echo supply command parameters when executing
echo this command file.
echo.
pause
goto done
REM: finished execution
:finish
echo.
echo Script execution is complete!
:done
@echo on
В данном командном файле используются утилиты командной строки osql и bcp которые входят в состав SQL Server. Утилита osql предназначена для выполнения команд SQL, системных процедур и сценариев, а утилита bcp — для пакетного копирования данных в файл данных из SQL Server и обратно.
Данный командный файл можно запустить в окне Solution Explorer, щелкнув на нем правой кнопкой мыши и выбрав в контекстном меню команду Run. Его также можно выполнить извне, независимо от Visual Studio .NET, аналогично другим командным файлам.
Учтите, что при запуске данного командного файла по отношению к базе данных в ней будут удалены все данные!
Аналогично сценариям создания и изменения, с помощью Visual Studio .NET можно генерировать запросы. За исключением тривиальных запросов, конструктор запросов с графическим пользовательским интерфейсом позволяет более эффективно и безошибочно создавать самые сложные запросы.
Далее работа в режиме конструктора запросов демонстрируется на примере создания параметрического запроса на обновление, который обновляет оптовые цены всех товаров на складе на указанную в процентах величину.
РИС. 8.13. Режим конструктора запросов с диалоговым окном Add Table
1. Откройте окно Solution Explorer и щелкните правой кнопкой мыши на любой папке, за исключением Database References. В контекстном меню выберите команду Add Query (Создать запрос), и на экране отобразится диалоговое окно Add New Item (Создать новый объект), показанное на рис. 8.2.
РИС. 8.14. Запрос на обновление поля WholesalePrice в таблице tblInventory
2. Выберите в области шаблонов Templates шаблон Database Query (Шаблон базы данных), укажите в текстовом поле Name имя нового запроса UpdateWholesale.dtq и щелкните на кнопке Open. (После этого на экране отобразится диалоговое окно Set Database Reference for Query для указания используемой ссылки на базу данных. — Прим. ред.) Далее в режиме конструктора запросов отобразится диалоговое окно Add Table (Включить таблицу), которое показано на рис. 8.13.
3. В диалоговом окне Add Table выберите таблицу tblInventory и щелкните на кнопке Add, а затем на кнопке Close.
4. Далее нужно изменить тип запроса с помощью команды меню Query→Change Туре→Update (Запрос→Изменить тип→Обновление).
5. В панели Diagram (Схема) конструктора запросов установите флажок в поле WholesalePrice, данные в котором предполагается обновить.
6. В панели Grid (Сетка) в столбце NewValue введите формулу: WholesalePrice * (1 + ? /100).
7. Эта формула принимает один параметр, который обозначает, на сколько процентов повышается оптовая цена товаров. При выполнении запроса символ подстановки в виде вопросительного знака будет заменен фактическим значением этого параметра. После выполнения этих действий окно конструктора запросов будет иметь такой вид, как на рис. 8.14.
8. Хотя данный запрос можно запустить сразу же после его создания в режиме конструктора запросов, в данном примере он будет запущен из окна Solution Explorer.
9. Закройте окно конструктора запросов и щелкните на кнопке Yes в ответ на предложение сохранить созданный запрос UpdateWholesale.dtq.
10. Щелкните дважды на таблице tblInventory в окне Server Explorer для отображения всех текущих данных в поле WholesalePrice этой таблицы. Именно эти данные об оптовых ценах на товары будут изменены в результате выполнения запроса UpdateWholesale.dtq.
Для сверки исходного и последующего после выполнения запроса состояний можно сделать снимок экрана. Например, можно выделить и скопировать все строки, а затем вставить их в текстовый файл с помощью программы Notepad.
11. Как и при запуске сценария, запрос можно запустить, просто перетаскивая и опуская его на нужную ссылку базы данных. Кроме того, можно щелкнуть правой кнопкой мыши на запросе и выбрать в контекстном меню команду Open.
Данное контекстное меню также содержит команды Design и Design которые открывают конструктор запросов по отношению к используемой по умолчанию или указанной ссылке на базу данных.
РИС. 8.15. Обновленные данные в таблице tblInventory после увеличения значений в поле WholesalePrice на 10%
12. Перетащите и опустите запрос UpdateWholesale.dtq на ссылку на базу данных Novelty в окне Solution Explorer.
13. После этого в диалоговом окне Execute Scripts or Queries (Выполнить сценарий или запрос) подтвердите желание выполнить запрос по отношению к выбранной ссылке на базу данных, щелкнув на кнопке Yes.
14. В диалоговом окне Define Query Parameters (Определить параметры запроса) введите значение 10 в столбце Parameter Value (Значение параметра) и щелкните на кнопке OK.
15. После этого на экране появится диалоговое окно с сообщением о результате выполнения запроса и количестве охваченных им записей. Для продолжения работы закройте его, щелкнув на кнопке OK.
16. Повторите действия, описанные в п. 9, для отображения обновленных значений поле WholesalePrice таблицы tblInventory, как показано на рис. 8.15.
В этой главе рассмотрены способы работы с проектами баз данных в среде Visual Studio .NET. Этот тип проекта не содержит кода на языке Visual Basic, потому что предназначен для создания, тестирования и запуска сценариев баз данных, запросов и командных файлов. Эти сценарии и команды позволяют создавать новые схемы базы данных, вносить изменения в существующие схемы, а также запрашивать и обновлять существующие данные. Эти эффективные инструменты следует использовать в максимальной степени во время создания и доставки приложения.
Вообще говоря, задачи создания, отладки и усовершенствования сценариев и запросов обычно выполняют аналитики баз данных, но все чаще эти задачи возлагаются на плечи прикладных программистов. Вот почему им необходимо иметь хотя бы базовые представления о способах выполнения таких задач.
В среде Visual Studio .NET и программе SQL Server Enterprise Manager совпадают многие инструменты. Какие из них предпочтительнее использовать?
Ответ прост: какие хотите. Для выполнения многих операций в среде Visual Studio .NET и программе SQL Server Enterprise Manager предусмотрены совершенно одинаковые инструменты. Однако есть и такие операции, для выполнения которых предусмотрен только один инструмент в одном из этих программных продуктов. Администратор базы данных обычно выполняет все операции с помощью инструментов программы SQL Server Enterprise Manager, а прикладной программист — с помощью инструментов среды Visual Studio .NET. Учтите, однако, что при работе с базой данных другого типа (например, Oracle) вам потребуются совершенно другие инструменты для создания или изменения объектов базы данных. Инструменты среды Visual Studio .NET позволяют просматривать и запрашивать данные в таких базах данных, но не могут изменять их.