Обзор 2
SQL Azure является реализацией СУБД Microsoft SQL Server для Windows Azure. Работа с SQL Azure будет достаточно простой для большинства разработчиков, поскольку поддерживается большая часть инструментов и способов разработки, доступных при использовании SQL Server. 2
Тем не менее, между SQL Azure и SQL Server существуют некоторые отличия. Некоторые из них связаны с архитектурными особенностями SQL Azure, в то время как причиной других является относительная новизна продукта. 2
В ходе данной лабораторной работы вы познакомитесь с некоторыми аспектами администрирования SQL Azure – добавлением учетной записи, созданием и управлением базой данных. Вы создадите простое приложение для Windows Azure, позволяющее управлять записями в таблице Contact базы данных, работающей под управлением SQL Azure. 2
В данной лабораторной работе вы: 2
Для выполнения данной лабораторной работы вам потребуется наличие: 3
Внимание: данная работа должна выполняться с последней версией инструментария Windows Azure Tools for Visual Studio 2010 (версия 1.4) и описывает работу с административным порталом Windows Azure Platform Management Portal. 3
Вам потребуется наличие учетной записи для доступа к SQL Azure. Для самостоятельной регистрации посетите сайт http://www.microsoft.com/windowsazure/sqlazure/. 3
[Данная процедура была выполнена для вас] 3
Для вашего удобства большая часть кода представлена в виде фрагментов (code snippets), зарегистрированных в Visual Studio. Чтобы проверить наличие требуемых для выполнения работы компонентов и установить фрагменты кода: 3
Откройте Проводник Windows (Windows Explorer) и перейдите в каталог Source\Setup. 4
Дважды щелкните на файле Dependencies.dep для запуска утилиты Dependency Checker, используя которую, установите фрагменты кода и недостающие компоненты. 4
В случае появления диалога User Account Control, подтвердите необходимость продолжения выполнения. 4
Внимание: данная операция требует повышения полномочий. Расширение .dep используется утилитой Dependency Checker. Для получения дополнительной информации об использовании утилиты обратитесь к документу Setup.docx, находящемуся в подкаталоге Assets в каталоге с материалами к данной работе. 4
В течение выполнения всей лабораторной работы вы будете добавлять в проект фрагменты кода. Для вашего удобства большая часть таких фрагментов оформлена в виде зарегистрированных в Visual Studio фрагментов, что позволяет добавлять их, а не вводить вручную.
4
Если вы не знакомы с концепцией использования фрагментов кода в Visual Studio, обратитесь к документу Setup.docx, находящемуся в подкаталоге Assets в каталоге с материалами к данной работе. 4
Данная лабораторная работа включает следующие упражнения: 4
Приблизительное время выполнения данной работы: 60 минут. 5
Внимание: при первом запуске Visual Studio вам будет предложено выбрать один из имеющихся наборов настроек. Каждый набор ориентирован на определенный стиль разработки и определяет схему размещения окон, поведение редакторов, перечень доступных фрагментов кода и другие настройки. Описанные ниже действия расчитаны на использование набора настроек под названием «General Development Settings». Если вы выберете другой набор настроек, порядок выполнения тех или иных действий может отличаться от описанного. 5
Упражнение 1: Подготовка учетной записи SQL Azure 5
В данном упражнении вы подключитесь к SQL Azure с использованием учетной записи, создадите сервер БД и добавите пользователя. Затем вы повторно подключитесь к SQL Azure, чтобы начать работу с созданной базой данных. 5
Задача 1 – создание и настройка сервера в SQL Azure 5
В этом упражнении вы подключитесь к административному порталу SQL Azure с использованием имеющейся учетной записи. 5
Перейдите на портал Windows Azure, располагающийся по адресу https://windows.azure.com. 5
Войдите в систему, используя учетную запись Windows Live. 5
6
Рисунок 6
Подключение к административному порталу Azure Services с использованием учетной записи Windows Live 6
На стартовой странице портала Windows Azure, щелкните по кнопке New Database Server. 6
6
Рисунок 6
Создание сервера БД в SQL Azure 6
Если вы ранее не создавали сервер БД, выполните эту процедуру, иначе можете пропустить это упражнение. 7
Чтобы создать сервер, выберите подписку из списка в левой панели. Нажмите кнопку Create на панели Server. 7
7
Рисунок 3 7
Создание сервера БД в SQL Azure 7
Выберите расположение из выпадающего списка Region, затем нажмите кнопку Next. Данная настройка определяет, где географически будет расположена база данных. 7
8
Рисунок 8
Выбор места размещения БД 8
Введите имя и пароль администратора и нажмите кнопку Next. 8
8
Рисунок 8
Ввод имени и пароля администратора БД 8
Внимание: учетная запись администратора используется для управления сервером базы данных. Не используйте его в строках подключения, где он может быть похищен третьими лицами. 9
Пароль должен удовлетворять приведенным ниже требованиям. 9
9
Нажмите кнопку Finish для завершения создания сервера. Правила брандмауэра вы настроите далее в этом упражнении. 9
9
Рисунок 9
Диалог настройки правил брандмауэра 10
После завершения будет отображена подробная информация о созданном сервере. 10
10
Рисунок 10
Информация о серверах SQL Azure 10
Внимание: информация о сервере, в том числе, содержит его полное доменное имя в формате: 10
.database.windows.net 10
где указывает на физический сервер, например, a9ixtp7pux.database.windows.net. 10
Раскройте узел подписок на левой панели и щелкните на имени добавленного сервера. Страница Server Information позволяет управлять основными настройками сервера. 10
10
Рисунок 10
Страница свойств сервера БД SQL Azure 11
Раскрывающийся список Firewall Rules позволяет указать перечень IP-адресов компьютеров, имеющих возможность подключения к SQL Azure Server. По умолчанию все подключения запрещены, поэтому обязательно настройте список доступа, чтобы клиенты могли подключаться к серверу. 11
11
Рисунок 11
Настройка правил брандмауэра SQL Azure 11
Внимание: для применения правил брандмауэра может потребоваться некоторое время. 11
Вы создали сервер БД и настроили его для выполнения следующих шагов лабораторной работы. Подключиться к работающей в SQL Azure базе данных можно из любой точки земного шара. 11
Упражнение 2: Выполнение DDL и DML запросов 11
В этом упражнении вы добавите базу данных, создадите ее структуру – несколько таблиц и индексов, после чего выполните ряд запросов к данным. Для работы вы сможете воспользоваться двумя инструментами. Первый - Database Manager for SQL Azure – доступный из административного портала Windows Azure веб-интерфейс на основе Silverlight. Второй инструмент – это давно знакомый и привычный SQL Server Management Studio. Вы увидите, что он одинаково полезен и для управления базами данных SQL Azure. 11
Задача 1 – создание новой базы данных 12
В левой панели административного портала Windows Azure выберите Database. 12
В левой панели найдите узел Subscriptions, последовательно разверните проект, выберите имя интересующего вас сервера, после чего нажмите кнопку Create на панели инструментов Database. 12
12
Рисунок 12
Создание новой базы данных 12
12
В диалоговом окне Create Database укажите имя базы данных (поле Database name) - например HoLTestDB (в примерах ниже предполагается, что база данных называется так), выберите издание (Edition) Web Edition и установите максимальный размер базы данных (поле Maximum size) равным 1 GB. 12
13
Рисунок 13
Свойства создаваемой базы данных 13
Внимание: в данной лабораторной работе вы создаете базу данных с помощью административного портала SQL Azure. Кроме того, поддерживается DDL-конструкция языка T-SQL CREATE DATABASE, позволяющая указать редакцию базы данных (Web или Business) и ее максимальный размер. Например, чтобы создать базу данных редакции Business, максимальный размер которой равен 30GB, следует воспользоваться следующей командой T-SQL: 13
CREATE DATABASE HolTestDB (MAXSIZE = 30GB) 13
После достижения базой данных максимального размера добавление в нее записей становится невозможным до удаления части данных. 13
Задача 2 – управление базой данных с помощью Database Manager for SQL Azure 13
В этой задаче вы воспользуетесь инструментом Database Manager for SQL Azure, веб-приложением на основе Silverlight, для подключения к созданной базе данных, создания и заполнения данными таблицы и последующего запроса ее содержимого. 13
Разверните узел сервера в левой панели, выберите базу данных HoLTestDB и нажмите кнопку Manage на панели инструментов. 13
14
Рисунок 14
Управление базой данных 14
На странице входа введите имя учетной записи и пароль и нажмите кнопку Connect. 14
14
Рисунок 14
Ввод реквизитов для входа в утилиту Database Manager 15
Дождитесь подключения к базе данных и отображения начальной страницы. 15
15
Рисунок 15
Утилита Database manager. Начальная страница 15
В группе Operations на панели инструментов нажмите New Table. 15
15
Рисунок 15
Создание таблицы 15
В интерфейсе создания таблицы установите ее имя (поле Name) в People. 16
Нажимая кнопку + Column, добавьте три столбца, как показано в таблице ниже. 16
16
Рисунок 16
Определение схемы таблицы 16
Нажмите кнопку Save, находящуюся в группе Operations панели инструментов. 16
16
Рисунок 16
Сохранение схемы таблицы 16
После сохранения таблицы нажмите кнопку Data в группе Context панели инструментов. 16
Нажимая кнопку + Row, добавьте записи в таблицу. Значения для колонок Name и Age возьмите из приведенной ниже таблицы. 17
17
Рисунок 17
Добавление строк в таблицу 17
Повторите предыдущий шаг для добавления всех записей, после чего сохраните данные нажатием кнопки Save в группе Operations панели инструментов. 17
Далее перейдите к закладке Database (в верхнем левом углу страницы) и нажмите кнопку New Query в группе Operations панели инструментов. 17
В окне запроса введите следующее выражение T-SQL, извлекающее все строки из таблицы People и нажмите кнопку Execute в группе Run панели инструментов. Убедитесь в том, что результат содержит предварительно введенные вами записи. 17
T-SQL 17
select * from People 17
18
Рисунок 18
Выполнение запроса к базе данных 18
Задача 3 – управление базой данных с помощью SQL Server Management Studio 18
В этой задаче вы будете работать с SQL Server с помощью привычного инструмента - SQL Server Management Studio. 18
Откройте SQL Server Management Studio из меню Start | All Programs | Microsoft SQL Server 2008 R2 | SQL Server Management Studio. Отобразится диалог ввода реквизитов. 18
В диалоге Connect to Server введите реквизиты. Убедитесь, что выбран тип аутентификации SQL Server Authentication, поскольку в текущий момент SQL Azure поддерживает только его. 18
Внимание: замените [SERVERNAME] вашим именем сервера («Имя_сервера».database.windows.net.) 18
19
Рисунок 19
Подключение к SQL Azure с использованием SQL Server Management Studio 19
Нажмите кнопку Connect. 19
В панели Object Explorer отобразится структура базы данных. Обратите внимание на то, что представление базы данных SQL Azure не отличается от традиционной. 19
19
Рисунок 19
Структура базы данных HoLTestDB в панели Object Explorer 19
В дереве Object Explorer выберите базу данных HoLTestDB и нажмите кнопку New Query на панели инструментов. 20
20
Рисунок 20
Вызов окна создания запроса 20
У вас открылось окно создания запроса. Чтобы убедиться в подключении к БД SQL Azure, можно воспользоваться встроенной функцией @@version. Введите приведенный ниже запрос и нажмите кнопку Execute. Полученный результат отображает редакцию и версию Microsoft SQL Azure. 20
T-SQL 20
SELECT @@version 20
20
Рисунок 20
Запрос версии SQL Azure 20
Замените предыдущий запрос приведенным ниже и нажмите кнопку Execute. Убедитесь в том, что результат отображает список доступных баз данных. 20
T-SQL 21
SELECT * FROM sys.databases 21
21
Рисунок 21
Результаты запроса, отображающего список доступных баз данных 21
Чтобы получить имя базы данных, в контексте которой работает текущее подключение, выполните приведенный ниже запрос. 21
C# 21
SELECT db_name() 21
21
Рисунок 21
Запрос текущей базы данных 21
Не закрывайте окно запроса, оно потребуется при работе над следующей задачей. 21
Задача 4 – создание учетных записей и пользователей базы данных 21
Как и SQL Server, SQL Azure позволяет создавать дополнительные учетные записи и ассоциировать их с пользователями базы данных. В данной задаче вы добавите учетную запись для входа, после чего создадите ассоциированного с ней пользователя базы данных HoLTestDB. 22
Откройте новое окно запроса, подключенное к базе данных master. Чтобы сделать это, в панели Object Explorer раскройте узел System Databases, расположенный внутри узла Databases, и выберите элемент master. Затем нажмите кнопку New Query на панели инструментов. 22
22
Рисунок 22
Открытие окна запроса в контексте БД master 22
Внимание: использовать уже открытое ранее окно запроса, подключенное к БД HoLTestDB, нельзя без закрытия текущего подключения. Инструкция USE <имя_базы_данных> не работает в SQL Azure. Таким образом, для изменения текущей БД необходимо открыть новое окно запроса или выполнить процедуру разрыва и повторного соединения. 22
Создайте учетную запись, выполнив следующий запрос: 22
T-SQL 22
CREATE LOGIN HoLUser WITH password='Password1' 22
Внимание: рекомендуется указать уникальный пароль и использовать его далее в ходе выполнения данной лабораторной работы. В противном случае настоятельно рекомендуется удалить учетную запись после завершения выполнения работы. Чтобы сделать это, выполните в контексте базы данных master следующий запрос: 22
DROP LOGIN HoLUser 23
Вернитесь в подключенное к базе данных HoLTestDB окно запроса. Если вы закрыли его, то откройте повторно, выбрав базу данных HoLTestDB в панели Object Explorer и нажав кнопку New Query. 23
В окне запроса выполните следующую команду, добавляющую нового пользователя в базу данных HoLTestDB. Новый пользователь ассоциируется с учетной записью HoLUser. 23
T-SQL 23
-- Create a new user from the login and execute 23
CREATE USER HoLUser FROM LOGIN HoLUser 23
Теперь добавьте пользователя в роль db_owner базы данных HoLTestDB, выполнив следующий запрос: 23
T-SQL 23
-- Add the new user to the db_owner role and execute 23
EXEC sp_addrolemember 'db_owner', 'HoLUser' 23
Внимание: сделав пользователя участником роли db_owner, вы присвоили ему очень широкий набор полномочий. В реальной ситуации следует руководствоваться принципом наименьших полномочий. 23
Измените используемого в текущем подключении пользователя на вновь созданного HoLUser. Чтобы сделать это, щелкните правой кнопкой мыши внутри окна запросов, выберите пункт Connection, после чего щелкните на Change Connection. 23
24
Рисунок 24
Изменение свойств подключения к базе данных 24
В диалоге Connect to Database Engine замените имя учетной записи (поле Login) на HoLUser и укажите пароль (поле Password) – значение, которое вы указали при создании учетной записи. 24
24
Рисунок 24
Подключение к базе данных от имени другой учетной записи 24
Нажмите кнопку Options, чтобы отобразить расширенный перечень настроек. Перейдите на закладку Connection Properties и убедитесь в том, чтоб выбрана база данных HoLTestDB. Если текущее значение отличается, потребуется впечатать его в поле Connect do database, поскольку в раскрывающемся списке необходимое значение может отсутствовать. Нажмите кнопку Connect. 25
25
Рисунок 25
Подключение к указанной базе данных 25
Внимание: теперь вы подключены к базе данных от имени пользователя HoLUser. В оставшейся части упражнения вы будете работать в контексте данного пользователя. 25
Задача 5 – создание таблиц, индексов и запросов 25
В окне запроса замените содержимое приведенным ниже фрагментом, создающим таблицу Contact, и выполните его. 26
T-SQL 26
CREATE TABLE [Contact]( 26
[ContactID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 26
[Title] [nvarchar](8) NULL, 26
[FirstName] [nvarchar](50) NOT NULL, 26
[LastName] [nvarchar](50) NOT NULL, 26
[EmailAddress] [nvarchar](50) NULL, 26
[Phone] [nvarchar](30) NULL, 26
[Timestamp] [timestamp] NOT NULL 26
) 26
Внимание: SQL Azure требует наличия кластерного индекса у всех таблиц. Если вы создадите таблицу без кластерного индекса, то не сможете добавлять в нее строки. 26
Поскольку кластерный индекс определяет физический порядок записей на диске, влияя на скорость выполнения некоторых запросов, иногда целесообразно применить его не к содержащему первичный ключ столбцу. 26
Создайте индекс по столбцу EmailAddress. Для этого выполните запрос: 26
T-SQL 26
CREATE INDEX IX_Contact_EmailAddress 26
ON Contact(EmailAddress) 26
Добавьте запись в таблицу Contact: 26
T-SQL 26
INSERT INTO [Contact] 26
([Title],[FirstName],[LastName],[EmailAddress],[Phone]) 26
VALUES 26
('Mr','David','Alexander','davida@fabrikam.com','555-1234-5555') 26
Теперь выполните выборку данных с отображением плана выполнения. Для этого используйте опцию SHOWPLAN_ALL: 26
T-SQL 27
SET SHOWPLAN_ALL ON 27
GO 27
SELECT * FROM Contact WHERE EmailAddress ='davida@fabrikam.com' 27
GO 27
SET SHOWPLAN_ALL OFF 27
27
Рисунок 27
План выполнения запроса на небольшом объеме данных 27
Теперь добавьте значительное количество строк в таблицу и повторно постройте план выполнения. Прежде всего, создайте хранимую процедуру AddData, добавляющую указанное количество записей в таблицу. Добавляемые строки идентичны за исключением адреса электронной почты, который формируется на основании значения счетчика (Counter) по шаблону [Counter]davida@fabrikam.com: 27
T-SQL 27
CREATE PROCEDURE AddData 27
@NumRows int 27
AS 27
DECLARE @counter int 27
SELECT @counter = 1 27
WHILE (@counter < @NumRows) 27
BEGIN 27
INSERT INTO [Contact] 27
([Title],[FirstName],[LastName],[EmailAddress],[Phone]) 28
VALUES 28
('Mr','David','Alexander',CAST(@counter as nvarchar)+'davida@fabrikam.com','555-1234-5555') 28
SELECT @counter = @counter + 1 28
END 28
Выполните хранимую процедуру для добавления 10000 строк в таблицу Contact: 28
T-SQL 28
EXEC AddData 10000 28
Внимание: добавление 10000 строк в таблицу может занять некоторое время. 28
Выполните приведенный ниже запрос и сравните планы выполнения со случаем, когда в таблице содержалось малое количество строк. 28
T-SQL 28
SET SHOWPLAN_ALL ON 28
GO 28
SELECT * FROM Contact WHERE EmailAddress ='davida@fabrikam.com' 28
GO 28
SET SHOWPLAN_ALL OFF 28
29
Рисунок 29
План выполнения запроса на значительном объеме данных 29
Внимание: обратите внимание, что во втором случае использован созданный индекс. В плане выполнения об этом свидетельствует запись Index Seek. 29
С использованием SQL Server Management Studio вы можете также отобразить план выполнения в графическом виде. Находясь в окне запроса, нажмите сочетание клавиш Ctrl-L, чтобы отобразить ожидаемый план выполнения (Estimated Execution Plan). 29
29
Рисунок 29
Графическое представление плана выполнения 29
Упражнение 3: работа с SQL Azure из приложения Windows Azure 30
Цель данного упражнения – продемонстрировать, насколько просто работать с SQL Azure и Windows Azure – это можно сделать, используя только имеющиеся в Visual Studio графические инструменты и функциональность перетаскивания объектов. 30
Задача 1 – создание тестовой базы данных в SQL Azure 30
Подключитесь к расположенной в SQL Azure базе данных HoLTestDB, используя созданную ранее учетную запись HoLUser. Вы можете использовать как SQL Server Management Studio, так и веб-приложение Database Manager for SQL Azure. 30
Если вы используете SQL Server Management Studio, выберите пункт Open | File в меню File, перейдите в подкаталог Source\Assets из каталога с материалами к лабораторной работе. Если вы работаете с приложением Database Manager for SQL Azure, выберите закладку Database в верхнем левом углу и нажмите кнопку Open Query на панели File. Выберите файл AdventureWorks2008LT_Azure.sql и нажмите кнопку Open. 30
Внимание: данный скрипт содержит облегченную версию базы данных AdventureWorksLT2008, доступную для скачивания с сайта Codeplex.com (http://msftdbprodsamples.codeplex.com/). Там содержится эта и другие тестовые базы для SQL Azure. 30
Выполните запрос; это может занять некоторое время. 30
Задача 2 – создание проекта в Visual Studio 30
В этой задаче вы создадите в Visual Studio новый проект – веб-приложение для Windows Azure. 30
Запустите Microsoft Visual Studio 2010 от имени администратора. Для этого в меню Start | All Programs | Microsoft Visual Studio 2010 щелкните правой кнопкой мыши по ярлыку Microsoft Visual Studio 2010 и выберите Run as Administrator. 30
В случае появления диалога User Account Control нажмите кнопку Continue. 30
В меню File выберите пункты New, затем Project. 30
В диалоге New Project разверните соответствующий предпочитаемому языку узел (Visual C# или Visual Basic) и выберите вариант Cloud на панели Installed Templates. 30
В списке шаблонов укажите Windows Azure Project. Установите имя для создаваемого проекта - “AdventureWorks” и местоположение - каталог Source\Ex3-BuildingSQLAzureApp в каталоге с материалами к лабораторной работе. Убедитесь в том, что установлен флажок Create directory for solution и установите имя решения в “Begin”. Нажмите кнопку OK для создания проекта. 30
31
Рисунок 31
Создание нового проекта для Windows Azure (C#) 31
31
Рисунок 32
Создание нового проекта для Windows Azure (Visual Basic) 32
В диалоге New Windows Azure Project на панели Roles раскройте закладку, соответствующую предпочитаемому вами языку (Visual C# или Visual Basic), выберите из списка тип роли ASP.NET Web Role и нажмите кнопку с указывающей вправо стрелкой (>), чтобы добавить экземпляр роли данного типа в решение. Перед тем, как закрыть данный диалог, выберите добавленную роль в правой панели, нажмите на пиктограмме с изображением карандаша и переименуйте роль в AdventureWorksWeb. Нажмите кнопку OK для создания решения. 32
32
Рисунок 32
Добавление ролей в проект для Windows Azure (C#) 32
33
Рисунок 33
Добавление ролей в проект для Windows Azure (VB) 33
После завершения создания шаблона проекта должно отобразиться содержимое страницы Default.aspx. Если этого не произошло, откройте указанный файл. 33
Перейдите в режим Design View, для чего нажмите кнопку Design. 33
Перетащите элемент управления GridView из раздела Data панели инструментов Toolbox на страницу. 33
33
Рисунок 33
Добавление элемента управления GridView 33
Используя SmartTag (кнопка со стрелкой в верхнем правом углу) добавленного элемента управления GridView, выберите в раскрывающемся списке Choose Data Source пункт New data source. 34
34
Рисунок 34
Создание нового источника данных 34
В мастере Data Source Configuration Wizard выберите источник данных Database. Не меняйте предлагаемый идентификатор и нажмите кнопку OK. 34
35
Рисунок 35
На диалоге Configure Data Source нажмите кнопку New Connection. 35
36
Рисунок 36
Если отобразится диалог Choose data source, выберите Microsoft SQL Server и нажмите кнопку Continue. 36
Теперь сконфигурируйте подключение к базе данных SQL Azure. Убедитесь, что в диалоге Add Connection указан провайдер Microsoft SQL Server (SqlClient). Если потребуется изменить, выберите Microsoft SQL Server в списке Data Source и .NET Framework Data Provider for SQL Server в раскрывающемся списке Data Provider. Установите значение поля Server name равным имени вашего сервера SQL Azure. Измените тип аутентификации на Use SQL Server Authentication и укажите реквизиты для подключения к SQL Azure. В списке доступных баз данных выберите HoLTestDB. 36
37
Рисунок 37
Нажмите кнопку Test Connection. Если все указано верно, вы увидите диалог, информирующий об успешном подключении. Нажмите кнопку OK. 37
38
Рисунок 38
Нажмите кнопку OK, чтобы закрыть диалог Add Connection. 38
Нажмите кнопку Next для перехода к следующему шагу мастера Data Source Configuration Wizard. 38
Убедитесь в том, что установлен флажок Yes, save this connection as, установите имя строки подключения в AdventureWorksLTConnectionString и нажмите кнопку Next. 38
38
Рисунок 39
Установите переключатель в значение Specify a custom SQL statement or stored procedure и нажмите кнопку Next. 39
39
Рисунок 39
Использование SQL выражения для выполнения запросов данных 39
Внимание: использование опции Specify columns from a table or view невозможно, так как в AdventureWorks используется именованная схема SalesLT – на нее необходимо ссылаться явно. 39
Вставьте приведенный ниже запрос в поле SQL Statement и нажмите кнопку Next. 39
SELECT [FirstName], [LastName], [CompanyName], [EmailAddress] FROM [SalesLT].[Customer] 40
40
Рисунок 40
Нажмите кнопку Test Query. Вы должны увидеть результат запроса. 40
41
Рисунок 41
Нажмите кнопку Finish. 41
Нажмите кнопку F5 для локального запуска приложения. 41
После запуска приложения в браузере вы увидите список заказчиков: 41
42
Рисунок 42
Закройте окно браузера. 42
Упражнение 4: работа с использованием различных механизмов доступа 42
В этом упражнении вы получите навыки выполнения простых операций при работе с базами данных SQL Azure с использованием ADO.NET, ODBC, OLEDB и технологии LINQ to SQL. Кроме того, вы увидите, как организовать доступ к находящимся в SQL Azure данным из кода на Java и PHP. 42
При работе с технологиями от Microsoft вы увидите, что взаимодействие с базой данных SQL Azure не отличается от работы с привычным SQL Server. Основное отличие заключается в формате строки подключения, используемой для создания соединения с SQL Azure. После установления соединения запросы можно выполнять с помощью любого класса, наследующего от DbCommand. 42
Задача 1 –открытие заготовки решения и изучение общей функциональности 43
Используя различные подходы, вы подключитесь к базе данных SQL Azure и выполните некоторые операции над данными. Чтобы не тратить время на реализацию простейших операций, вы возьмете за основу проект, в котором уже содержится эта функциональность – это позволит сосредоточиться на более сложных вопросах и подчеркнет отличия предлагаемых для рассмотрения технологий. 43
В этой задаче вы откроете решение ConnectDemoApp и изучите описание класса SQLAzureConnectionDemo. Затем вы создадите потомков данного класса – по одной реализации для каждой демонстрируемой технологии. 43
Запустите Microsoft Visual Studio 2010 из меню Start | All Programs | Microsoft Visual Studio 2010 | Microsoft visual Studio 2010. 43
Откройте заготовку решения для данного упражнения. Для этого выберите пункт меню File | Open Project. В диалоге Open Project перейдите в каталог Source\Ex4-ConnectingViaClientLibraries\begin внутри каталога с материалами к работе. Выберите соответствующий предпочитаемому языку каталог (C# или VB), затем откройте файл решения ConnectDemoApp.sln, находящийся в папке ConnectDemoApp. Откроется решение с приведенной ниже структурой. 43
43
Рисунок 43
Структура решения Connect Demo App (C#) 43
44
Рисунок 44
Структура решения Connect Demo App (Visual Basic) 44
Как было сказано ранее, вы создадите по одному классу для каждой рассматриваемой технологии. Каждый класс будет наследовать от абстрактного класса SQLAzureConnectionDemo, предоставляющего базовую функциональность работы с БД SQL Azure. Внутри используется провайдер, реализуемый в дочернем классе. Приведенная ниже таблица поясняет назначение всех методов данного класса: 44
Обратите внимание, что в дочерних классах необходимо и достаточно переопределить только методы CreateConnection и CreateCommand. 45
Задача 2 – подключение к SQL Azure с использованием ADO.NET 45
Добавьте в проект новый класс AdoConnectionDemo. Для этого щелкните правой кнопкой на проекте ConnectDemoApp в панели Solution Explorer и выберите Add | Class. В диалоге Add New Item выберите шаблон Class и измените имя на AdoConnectionDemo.cs и AdoConnectionDemo.vb в зависимости от выбранного языка. 45
Добавьте в класс объявления пространств имен: 45
C# 45
using System.Data.Common; 45
using System.Data.SqlClient; 45
Visual Basic 45
Imports System.Data.Common 45
Imports System.Data.SqlClient 45
Обновите объявление класса, сделав его открытым и наследующим от SQLAzureConnectionDemo. Результат представлен ниже: 45
Внимание: В Visual Basic новый класс всегда создается как Public. 45
C# 45
public class AdoConnectionDemo : SQLAzureConnectionDemo 45
{ 45
} 45
Visual Basic 45
Public Class AdoConnectionDemo 46
Inherits SQLAzureConnectionDemo 46
End Class 46
Добавьте конструктор, передающий реквизиты в конструктор базового класса: 46
(Code Snippet – Intro to SQL Azure – Ex4 ADO constructor – C#) 46
C# 46
public AdoConnectionDemo(string userName, string password, string dataSource, string databaseName) 46
: base(userName, password, dataSource, databaseName) 46
{ 46
} 46
(Code Snippet – Intro to SQL Azure – Ex4 ADO constructor – VB) 46
Visual Basic 46
Public Sub New(ByVal userName As String, ByVal password As String, ByVal dataSource As String, ByVal databaseName As String) 46
MyBase.New(userName, password, dataSource, databaseName) 46
End Sub 46
Переопределите метод CreateConnection для создания объекта типа SqlConnection: 46
(Code Snippet – Intro to SQL Azure – Ex4 ADO CreateConnection – C#) 46
C# 46
protected override DbConnection CreateConnection(string userName, string password, string dataSource, string databaseName) 46
{ 46
return new SqlConnection(CreateAdoConnectionString(userName, password, dataSource, databaseName)); 46
} 46
(Code Snippet – Intro to SQL Azure – Ex4 ADO CreateConnection – VB) 46
Visual Basic 46
Protected Overrides Function CreateConnection(ByVal userName As String, ByVal password As String, ByVal dataSource As String, ByVal databaseName As String) As DbConnection 47
Return New SqlConnection(CreateAdoConnectionString(userName, password, dataSource, databaseName)) 47
End Function 47
Реализуйте метод CreateAdoConnectionString, используемый методом CreateConnection. Он конструирует строку подключения ADO.NET, для чего использует возможности класса SqlConnectionStringBuilder. 47
(Code Snippet – Intro to SQL Azure – Ex4 ADO CreateAdoConnectionString method – C#) 47
C# 47
private string CreateAdoConnectionString(string userName, string password, string dataSource, string databaseName) 47
{ 47
// create a new instance of the SQLConnectionStringBuilder 47
SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder 47
{ 47
DataSource = dataSource, 47
InitialCatalog = databaseName, 47
Encrypt = true, 47
TrustServerCertificate = false, 47
UserID = userName, 47
Password = password, 47
}; 47
return connectionStringBuilder.ToString(); 47
} 47
(Code Snippet – Intro to SQL Azure – Ex4 ADO CreateAdoConnectionString method – VB) 47
Visual Basic 47
Private Function CreateAdoConnectionString(ByVal userName As String, ByVal password As String, ByVal dataSource As String, ByVal databaseName As String) As String 47
' create a new instance of the SQLConnectionStringBuilder 48
Dim connectionStringBuilder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder With {.DataSource = dataSource, .InitialCatalog = databaseName, .Encrypt = True, .TrustServerCertificate = False, .UserID = userName, .Password = password} 48
Return connectionStringBuilder.ToString() 48
End Function 48
Переопределите метод CreateCommand для создания команды ADO.NET. Этот абстрактный метод вызывается из родительского класса. 48
(Code Snippet – Intro to SQL Azure – Ex4 ADO CreateCommand method – C#) 48
C# 48
protected override DbCommand CreateCommand(DbConnection connection) 48
{ 48
return new SqlCommand() { Connection = connection as SqlConnection }; 48
} 48
(Code Snippet – Intro to SQL Azure – Ex4 ADO CreateCommand method – VB) 48
Visual Basic 48
Protected Overrides Function CreateCommand(ByVal connection As DbConnection) As DbCommand 48
Return New SqlCommand() With {.Connection = TryCast(connection, SqlConnection)} 48
End Function 48
Это все, что необходимо сделать для поддержки ADO.NET. Теперь внесите некоторые изменения в файл Program.cs или Module1.vb (в зависимости от выбранного языка) для проверки добавленной функциональности. 48
Откройте файл Program.cs (для проекта на Visual C#) или Module1.vb (для проекта на Visual Basic), дважды щелкнув на нем в панели Solution Explorer. 48
Добавьте в метод Main код, создающий экземпляр класса AdoConnectionDemo и выполняющий тестовый пример. 48
(Code Snippet – Intro to SQL Azure – Ex4 ADO demo implementation – C#) 48
C# 48
static void Main(string[] args) 48
{ 49
//Invoke the ADO.NET connection demo 49
Console.WriteLine("Starting the ADO.NET Connection Demo..."); 49
AdoConnectionDemo demo1 = new AdoConnectionDemo(userName, password, datasource, databaseName); 49
demo1.ConnectToSQLAzureDemo(); 49
Console.WriteLine("Demo Complete... Press any key"); 49
Console.ReadKey(); 49
} 49
(Code Snippet – Intro to SQL Azure – Ex4 ADO demo implementation – VB) 49
Visual Basic 49
Sub Main() 49
' Invoke the ADO.NET connection demo 49
Console.WriteLine("Starting the ADO.NET Connection Demo...") 49
Dim demo1 = New AdoConnectionDemo(_userName, _password, _datasource, _databaseName) 49
demo1.ConnectToSQLAzureDemo() 49
Console.WriteLine("Demo Complete... Press any key") 49
Console.ReadKey() 49
End Sub 49
Найдите над методом Main объявления переменных и обновите их значения в соответствии с реквизитами учетной записи SQL Azure. 49
49
Рисунок 49
Настройка параметров подключения к SQL Azure (C#) 49
50
Рисунок 50
Настройка параметров подключения к SQL Azure (Visual Basic) 50
Нажмите F5 для запуска приложения. В консоли должен отобразиться результат выполнения запросов. 50
50
Рисунок 50
Результат выполнения с использованием технологии ADO.NET 50
Задача 3 – подключение к SQL Azure с использованием ODBC 50
В этой задаче вы создадите наследующий от SQLAzureConnectionDemo класс и реализуете функциональность для работы с SQL Azure с использованием ODBC. 50
Добавьте в проект новый класс OdbcConnectionDemo. Для этого щелкните правой кнопкой на проекте ConnectDemoApp в панели Solution Explorer и выберите Add | Class. В диалоге Add New Item выберите шаблон Class и измените имя на OdbcConnectionDemo.cs или OdbcConnectionDemo.vb в зависимости от выбранного языка. 50
Добавьте в класс объявления пространств имен: 50
C# 50
using System.Data.Common; 50
using System.Data.Odbc; 51
Visual Basic 51
Imports System.Data.Common 51
Imports System.Data.Odbc 51
Обновите объявление класса, сделав его открытым и наследующим от SQLAzureConnectionDemo. Результат представлен ниже: 51
Внимание: В Visual Basic новый класс всегда создается как Public. 51
C# 51
public class OdbcConnectionDemo : SQLAzureConnectionDemo 51
{ 51
} 51
Visual Basic 51
Public Class OdbcConnectionDemo 51
Inherits SQLAzureConnectionDemo 51
End Class 51
Добавьте конструктор, передающий реквизиты в конструктор базового класса: 51
(Code Snippet – Intro to SQL Azure – Ex4 ODBC constructor – C#) 51
C# 51
public OdbcConnectionDemo(string userName, string password, string dataSource, string databaseName): 51
base (userName, password, dataSource, databaseName) 51
{ 51
} 51
(Code Snippet – Intro to SQL Azure – Ex4 ODBC constructor – VB) 51
Visual Basic 51
Public Sub New(ByVal userName As String, ByVal password As String, ByVal dataSource As String, ByVal databaseName As String) 51
MyBase.New(userName, password, dataSource, databaseName) 52
End Sub 52
Переопределите метод CreateConnection для создания объекта типа SqlConnection: 52
(Code Snippet – Intro to SQL Azure – Ex4 ODBC CreateConnection – C#) 52
C# 52
protected override DbConnection CreateConnection(string userName, string password, string dataSource, string databaseName) 52
{ 52
return new OdbcConnection(CreateOdbcConnectionString(userName, password, dataSource, databaseName)); 52
} 52
(Code Snippet – Intro to SQL Azure – Ex4 ODBC CreateConnection – VB) 52
Visual Basic 52
Protected Overrides Function CreateConnection(ByVal userName As String, ByVal password As String, ByVal dataSource As String, ByVal databaseName As String) As DbConnection 52
Return New OdbcConnection(CreateOdbcConnectionString(userName, password, dataSource, databaseName)) 52
End Function 52
Реализуйте метод CreateOdbcConnectionString, используемый методом CreateConnection. Этот метод создает строку подключения для ODBC-драйвера. Предлагаемая реализация использует драйвер SQL Server Native Client 10.0. Вы можете указать необходимость использования другого драйвера ODBC. 52
(Code Snippet – Intro to SQL Azure – Ex4 ODBC CreateOdbcConnectionString method – C#) 52
C# 52
private string CreateOdbcConnectionString(string userName, string password, string dataSource, string databaseName) 52
{ 52
string serverName = GetServerName(dataSource); 52
OdbcConnectionStringBuilder connectionStringBuilder = new OdbcConnectionStringBuilder 52
{ 53
Driver = "SQL Server Native Client 10.0", 53
}; 53
connectionStringBuilder["Server"] = "tcp:" + dataSource; 53
connectionStringBuilder["Database"] = databaseName; 53
connectionStringBuilder["Uid"] = userName + "@" + serverName; 53
connectionStringBuilder["Pwd"] = password; 53
return connectionStringBuilder.ConnectionString; 53
} 53
(Code Snippet – Intro to SQL Azure – Ex4 ODBC CreateOdbcConnectionString method – VB) 53
Visual Basic 53
Private Function CreateOdbcConnectionString(ByVal userName As String, ByVal password As String, ByVal dataSource As String, ByVal databaseName As String) As String 53
Dim serverName As String = GetServerName(dataSource) 53
Dim connectionStringBuilder As OdbcConnectionStringBuilder = New OdbcConnectionStringBuilder With {.Driver = "SQL Server Native Client 10.0"} 53
connectionStringBuilder("Server") = "tcp:" & dataSource 53
connectionStringBuilder("Database") = databaseName 53
connectionStringBuilder("Uid") = userName & "@" & serverName 53
connectionStringBuilder("Pwd") = password 53
Return connectionStringBuilder.ConnectionString 53
End Function 53
Переопределите метод CreateCommand для создания команды OdbcCommand. Этот абстрактный метод вызывается из родительского класса. 53
(Code Snippet – Intro to SQL Azure – Ex4 ODBC CreateCommand method – C#) 53
C# 53
protected override DbCommand CreateCommand(DbConnection connection) 53
{ 53
return new OdbcCommand() { Connection = connection as OdbcConnection }; 53
} 54
(Code Snippet – Intro to SQL Azure – Ex4 ODBC CreateCommand method – VB) 54
Visual Basic 54
Protected Overrides Function CreateCommand(ByVal connection As DbConnection) As DbCommand 54
Return New OdbcCommand() With {.Connection = TryCast(connection, OdbcConnection)} 54
End Function 54
Это все, что необходимо сделать для работы с использованием ODBC. Теперь внесите некоторые изменения в файл Program.cs или Module1.vb (в зависимости от выбранного языка) для проверки добавленной функциональности. 54
Откройте файл Program.cs (для проекта на Visual C#) или Module1.vb (для проекта на Visual Basic), дважды щелкнув на нем в панели Solution Explorer. 54
Добавьте в метод Main код, создающий экземпляр класса OdbcConnectionDemo и выполняющий тестовый пример. 54
(Code Snippet – Intro to SQL Azure – Ex4 ODBC demo implementation – C#) 54
C# 54
static void Main(string[] args) 54
{ 54
//... 54
//Invoke the ODBC connection demo 54
Console.WriteLine("Starting the ODBC Connection Demo..."); 54
OdbcConnectionDemo demo2 = new OdbcConnectionDemo(userName, password, datasource, databaseName); 54
demo2.ConnectToSQLAzureDemo(); 54
Console.WriteLine("Demo Complete... Press any key"); 54
Console.ReadKey(); 54
} 54
(Code Snippet – Intro to SQL Azure – Ex4 ODBC demo implementation – VB) 54
Visual Basic 54
Sub Main() 54
' ... 55
' Invoke the ODBC connection demo 55
Console.WriteLine("Starting the ODBC Connection Demo...") 55
Dim demo2 = New OdbcConnectionDemo(_userName, _password, _datasource, _databaseName) 55
demo2.ConnectToSQLAzureDemo() 55
Console.WriteLine("Demo Complete... Press any key") 55
Console.ReadKey() 55
End Sub 55
Если вы не сделали этого ранее, найдите над методом Main объявления переменных и обновите их значения в соответствии с реквизитами учетной записи SQL Azure. 55
Нажмите F5 для запуска приложения. В консоли должен отобразиться результат выполнения запросов. 55
55
Рисунок 55
Результат выполнения с использованием ODBC 55
Задача 4 – подключение к SQL Azure с использованием OLEDB 55
Добавьте в проект новый класс OleDbConnectionDemo. Для этого щелкните правой кнопкой на проекте ConnectDemoApp в панели Solution Explorer и выберите Add | Class. В диалоге Add New Item выберите шаблон Class и измените имя на OleDbConnectionDemo.cs или OleDbConnectionDemo.vb в зависимости от выбранного языка. 55
Добавьте в класс объявления пространств имен: 56
C# 56
using System.Data.Common; 56
using System.Data.OleDb; 56
Visual Basic 56
Imports System.Data.Common 56
Imports System.Data.OleDb 56
Обновите объявление класса, сделав его открытым и наследующим от SQLAzureConnectionDemo. Результат представлен ниже: 56
Внимание: В Visual Basic новый класс всегда создается как Public. 56
C# 56
public class OleDbConnectionDemo : SQLAzureConnectionDemo 56
{ 56
} 56
Visual Basic 56
Public Class OleDbConnectionDemo 56
Inherits SQLAzureConnectionDemo 56
End Class 56
Добавьте конструктор, передающий реквизиты в конструктор базового класса: 56
(Code Snippet – Intro to SQL Azure – Ex4 OLEDB constructor – C#) 56
C# 56
public OleDbConnectionDemo(string userName, string password, string dataSource, string databaseName) 56
: base(userName, password, dataSource, databaseName) 56
{ 56
} 57
(Code Snippet – Intro to SQL Azure – Ex4 OLEDB constructor – VB) 57
Visual Basic 57
Public Sub New(ByVal userName As String, ByVal password As String, ByVal dataSource As String, ByVal databaseName As String) 57
MyBase.New(userName, password, dataSource, databaseName) 57
End Sub 57
Переопределите метод CreateConnection для создания объекта типа OleDbConnection: 57
(Code Snippet – Intro to SQL Azure – Ex4 OLEDB CreateConnection – C#) 57
C# 57
protected override DbConnection CreateConnection(string userName, string password, string dataSource, string databaseName) 57
{ 57
return new OleDbConnection(CreateOleDBConnectionString(userName, password, dataSource, databaseName)); 57
} 57
(Code Snippet – Intro to SQL Azure – Ex4 OLEDB CreateConnection – VB) 57
Visual Basic 57
Protected Overrides Function CreateConnection(ByVal userName As String, ByVal password As String, ByVal dataSource As String, ByVal databaseName As String) As DbConnection 57
Return New OleDbConnection(CreateOleDBConnectionString(userName, password, dataSource, databaseName)) 57
End Function 57
Реализуйте метод CreateOleDbConnectionString, используемый методом CreateConnection. Этот метод создает строку подключения для OLEDB. 57
(Code Snippet – Intro to SQL Azure – Ex4 OLEDB CreateOleDbConnectionString method – C#) 57
C# 57
private string CreateOleDBConnectionString(string userName, string password, string dataSource, string databaseName) 57
{ 57
string serverName = GetServerName(dataSource); 58
OleDbConnectionStringBuilder connectionStringBuilder = new OleDbConnectionStringBuilder 58
{ 58
Provider = "SQLOLEDB", 58
DataSource = dataSource, 58
}; 58
connectionStringBuilder["Initial Catalog"] = databaseName; 58
connectionStringBuilder["UId"] = userName + "@" + serverName; 58
connectionStringBuilder["Pwd"] = password; 58
return connectionStringBuilder.ConnectionString; 58
} 58
(Code Snippet – Intro to SQL Azure – Ex4 OLEDB CreateOleDbConnectionString method – VB) 58
Visual Basic 58
Private Function CreateOleDBConnectionString(ByVal userName As String, ByVal password As String, ByVal dataSource As String, ByVal databaseName As String) As String 58
Dim serverName As String = GetServerName(dataSource) 58
Dim connectionStringBuilder As OleDbConnectionStringBuilder = New OleDbConnectionStringBuilder With {.Provider = "SQLOLEDB", .DataSource = dataSource} 58
connectionStringBuilder("Initial Catalog") = databaseName 58
connectionStringBuilder("UId") = userName & "@" & serverName 58
connectionStringBuilder("Pwd") = password 58
Return connectionStringBuilder.ConnectionString 58
End Function 58
Переопределите метод CreateCommand для создания команды OleDbCommand. Этот абстрактный метод вызывается из родительского класса. 58
(Code Snippet – Intro to SQL Azure – Ex4 OLEDB CreateCommand method – C#) 58
C# 59
protected override DbCommand CreateCommand(DbConnection connection) 59
{ 59
return new OleDbCommand() { Connection = connection as OleDbConnection }; 59
} 59
(Code Snippet – Intro to SQL Azure – Ex4 OLEDB CreateCommand method – VB) 59
Visual Basic 59
Protected Overrides Function CreateCommand(ByVal connection As DbConnection) As DbCommand 59
Return New OleDbCommand() With {.Connection = TryCast(connection, OleDbConnection)} 59
End Function 59
Это все, что необходимо сделать для работы с использованием OLEDB. Теперь внесите некоторые изменения в файл Program.cs или Module1.vb (в зависимости от выбранного языка) для проверки добавленной функциональности. 59
Откройте файл Program.cs (для проекта на Visual C#) или Module1.vb (для проекта на Visual Basic), дважды щелкнув на нем в панели Solution Explorer. 59
Добавьте в метод Main код, создающий экземпляр класса OleDbConnectionDemo и выполняющий тестовый пример. 59
(Code Snippet – Intro to SQL Azure – Ex4 OLEDB demo implementation – C#) 59
C# 59
static void Main(string[] args) 59
{ 59
//... 59
//Invoke the OleDB connection demo 59
Console.WriteLine("Starting the OLEDB Connection Demo…"); 59
OleDbConnectionDemo demo3 = new OleDbConnectionDemo(userName, password, datasource, databaseName); 59
demo3.ConnectToSQLAzureDemo(); 59
Console.WriteLine("Demo Complete... Press any key"); 59
Console.ReadKey(); 59
} 59
(Code Snippet – Intro to SQL Azure – Ex4 OLEDB demo implementation – VB) 60
Visual Basic 60
Sub Main() 60
' ... 60
' Invoke the OleDB connection demo 60
Console.WriteLine("Starting the OLEDB Connection Demo...") 60
Dim demo3 = New OleDbConnectionDemo(_userName, _password, _datasource, _databaseName) 60
demo3.ConnectToSQLAzureDemo() 60
Console.WriteLine("Demo Complete... Press any key") 60
Console.ReadKey() 60
End Sub 60
Если вы не сделали этого ранее, найдите над методом Main объявления переменных и обновите их значения в соответствии с реквизитами учетной записи SQL Azure. 60
Нажмите F5 для запуска приложения. В консоли должен отобразиться результат выполнения запросов. 60
60
Рисунок 60
Результат выполнения с использованием OLEDB 60
Задача 5 – подключение к SQL Azure с использованием Entity Framework 60
Вы подключились к базе данных SQL Azure с использованием трех технологий. Последнее, что вы попробуете, будет использование Entity Framework. Реализация классов в данном случае не будет наследовать от SQLAzureConnectionDemo, так как при использовании Entity Framework отсутствует явное управление подключениями и командами; все эти объекты создаются неявно для пользователя. 61
Откройте файл App.config и измените строку подключения таким образом, чтобы ссылаться на базу данных SQL Azure с использованием реквизитов созданного ранее пользователя. 61
Внимание: выполнение этого шага является обязательным, так как Entity Framework извлекает информацию для создания подключения из конфигурационного файла. 61
Добавьте в проект новый элемент ADO.NET Entity Data Model с именем HoLModel. Для этого щелкните правой кнопкой на узле проекта ConnectDemoApp в панели Solution Explorer. Выберите пункт меню Add | New Item. В диалоге Add New Item выберите шаблон ADO.NET Entity Data Model и измените имя на HoLModel.edmx. 61
61
Рисунок 61
Добавление модели EF 61
В мастере Entity Data Model Wizard выберите пункт Generate from database и нажмите кнопку Next. 61
62
Рисунок 62
Выбор исходных данных для создания модели 62
На шаге Choose Your Data Connection выберите пункт Yes, include sensitive data in the connection string и оставьте значения всех настроек по умолчанию. 62
63
Рисунок 63
Указание настроек модели 63
На шаге Choose Your Database Objects выберите все объекты и нажмите кнопку Finish . 63
64
Рисунок 64
Выбор объектов базы данных 64
После завершения создания модели она будет показана. 64
65
Рисунок 65
EF-модель создана 65
Добавьте в проект новый класс EFConnectionDemo. Для этого щелкните правой кнопкой на проекте ConnectDemoApp в панели Solution Explorer и выберите Add | Class. В диалоге Add New Item выберите шаблон Class и измените имя на EFConnectionDemo.cs или EFConnectionDemo.vb в зависимости от выбранного языка. 65
Обновите объявление класса, сделав его открытым: 65
C# 65
public class EFConnectionDemo 65
{ 65
} 65
Visual Basic 65
Public Class EFConnectionDemo 65
End Class 66
Только для проекта на C#, добавьте объявления следующих пространств имен: 66
C# 66
using System; 66
using System.Linq; 66
Добавьте в класс EFConnectionDemo метод, извлекающий из базы данных названия компаний и выводящий их на консоль. Воспользуетесь для этого возможностями класса EF HolTestDBEntities. 66
(Code Snippet – Intro to SQL Azure – Ex4 EF ConnectToSQLAzure method – C#) 66
C# 66
/// 66
/// HolTestDBEntities takes care of handling your transactions for you 66
/// leaving you free use Linq to extract information stores up in the cloud 66
/// 66
public void ConnectToSQLAzureDemo() 66
{ 66
HolTestDBEntities context = new HolTestDBEntities(); 66
IQueryable companyNames = from customer in context.Customers 66
where customer.CustomerID < 20 66
select customer.CompanyName; 66
66
foreach (var company in companyNames) 66
{ 66
Console.WriteLine(company); 66
} 66
} 66
66
(Code Snippet – Intro to SQL Azure – Ex4 EF ConnectToSQLAzure method – VB) 66
''' 67
''' HolTestDBEntities takes care of handling your transactions for you 67
''' leaving you free you use Linq to extraxt information stored up in the cloud. 67
''' 67
Public Sub ConnectToSQLAzureDemo() 67
Dim context As New HolTestDBEntities() 67
' get all company names 67
Dim companyNames As IQueryable(Of String) = From customer In context.Customers _ 67
Where customer.CustomerID < 20 _ 67
Select customer.CompanyName 67
' display these all on the console 67
For Each company As String In companyNames 67
Console.WriteLine(company) 67
Next company 67
End Sub 67
Теперь внесите некоторые изменения в файл Program.cs или Module1.vb (в зависимости от выбранного языка) для проверки добавленной функциональности. 67
(Code Snippet – Intro to SQL Azure – Ex4 EF demo implementation – C#) 67
C# 67
static void Main(string[] args) 67
{ 67
//... 67
//Invoke the Entity Framework connection demo 67
Console.WriteLine("Starting the Entity Framework Connection Demo..."); 67
EFConnectionDemo demo4 = new EFConnectionDemo(); 67
demo4.ConnectToSQLAzureDemo(); 67
Console.WriteLine("Demo Complete... Press any key"); 68
Console.ReadKey(); 68
} 68
(Code Snippet – Intro to SQL Azure – Ex4 EF demo implementation – VB) 68
Visual Basic 68
Sub Main() 68
' ... 68
' Invoke the Entity Framework connection demo 68
Console.WriteLine("Starting the Entity Framework Connection Demo...") 68
Dim demo4 = New EFConnectionDemo() 68
demo4.ConnectToSQLAzureDemo() 68
Console.WriteLine("Demo Complete... Press any key") 68
Console.ReadKey() 68
End Sub 68
Нажмите F5 для запуска приложения. В консоли должен отобразиться результат – длинный перечень названий компаний, извлеченный из БД средствами Entity Framework. 68
68
Рисунок 68
Результат выполнения с использованием функциональности Entity Framework 68
Задача 6 – подключение к SQL Azure с использованием сторонних технологий 68
Подключение к базе данных SQL Azure с использованием сторонних технологий также просто. 69
Приведенный ниже фрагмент кода на PHP, как и один из примеров выше, использует драйвер SQL Server Native Client ODBC. 69
PHP 69
$host = "server.database.windows.net"; 69
$dbname = "database"; 69
$dbuser = "user@server"; 69
$dbpwd = "password"; 69
$driver = "{SQL Server Native Client 10.0}"; 69
// Build connection string 69
$dsn="Driver=$driver;Server=$host;Database=$dbname;Encrypt=true;TrustServerCertificate=true"; 69
if (!($conn = @odbc_connect($dsn, $dbuser, $dbpwd))) { 69
die("Connection error: " . odbc_errormsg()); 69
} 69
69
// Got a connection, do what you will 69
69
// Free the connection 69
@odbc_close($conn); 69
?> 69
Ниже приведен пример подключения к SQL Azure с использованием JDBC. 69
JAVA 69
// Build a connection string 69
String connectionUrl= "jdbc:sqlserver://server.database.windows.net;" + 69
"database=mydatabase;encrypt=true;user=user@server;password=*****"; 69
// Next, make the sure the SQL Server Driver is loaded. 69
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 69
69
// Then attempt to get a connection. This will null or throw if we can't get a connection. 70
Connection sqlConn = DriverManager.getConnection(connectionUrl); 70
if (sqlConn == null) 70
{ 70
System.out.println("Unable to obtain connection. exiting"); 70
System.exit(1); 70
} 70
// Got a connection, do what you will 70
// Free the connection 70
sqlConn.close(); 70
Результат 70
В этой работы вы познакомились с базовыми принципами работы с SQL Azure. Если у вас ранее был опыт работы с СУБД MS SQL Server, выполнение ряда задач должно было показаться вам знакомым. Важно, что использование SQL Azure позволяет применить навыки, полученные ранее в ходе работы с SQL Server. 70
Вы научились создавать базы данных, учетные записи и пользователей базы данных. Вы увидели, что по большей части работа с объектами SQL Azure не отличается от работы с SQL Server. 70
Кроме того, вы создали простое приложение для Windows Azure, умеющее взаимодействовать с базой данных SQL Azure. 70
И, наконец, убедились, что создание подключений к базе данных SQL Azure с использованием различных технологий доступа от Microsoft не отличается от создания подключений к традиционным реляционным базам данных. 70