- Меня часто спрашивают, как читать с SQL Server в приложении Windows 8 .
- Ожидается, что приложения Windows 8 будут запускаться непосредственно из Магазина Windows без ограничений, накладываемых подключением к локальным серверам через строку подключения.
- Рекомендуемый подход — выставить вашу базу данных через веб-сервис .
- Две технологии Microsoft, которые делают это:
- Windows Communication Foundation
- ASP.NET Web API (более современный подход)
- Мы будем использовать эту технологию в этом посте.
Начнем с создания базы данных. Мы будем строить базу данных в MS Cloud с помощью Windows Azure.
Рисунок 1: Портал Windows Azure, База данных SQL
- На рисунке 1 показан портал Windows Azure
- Мы выберем базу данных SQL
- В левом нижнем углу вы можете увидеть знак плюс со словом NEW
- Выберите NEW и назовите вашу базу данных
Рисунок 2: Создание базы данных SQL
- На рисунке 2 мы создаем базу данных с именем BrunoEasyDBLession
- Если вам нужен видеоурок с более подробной информацией, смотрите ссылку ниже
- Обратите внимание, что я ранее создал сервер с именем:
- ol9d1pjpmi.database.windows.net
- На рисунке 3 ниже показана созданная база данных.
Рисунок 3: BrunoEasyDBLesson создан
Рисунок 4: Детализация в базе данных для добавления таблиц
- Следующим шагом является создание некоторых таблиц и добавление данных для тестирования.
- Нажмите MANAGE, как показано на рисунке 4.
- Это заняло у меня несколько попыток, чтобы я мог войти, как показано на рисунке 5
- Имя пользователя и пароль были определены на SERVER уровне. Вы сделали этот шаг ранее. Обратите внимание, что это не имя пользователя и пароль базы данных. Это на уровне SERVER.
- Смотрите ранее упомянутое видео для более подробной информации.
- Мы не показали создание сервера в этом посте.
Рисунок 5: Вход на сервер
Рисунок 6: Портал управления базой данных
- На данный момент мы можем начать определять таблицы .
- Мы создадим таблицу с именем CUSTOMERS .
- Мы также добавим немного данных .
- Нажмите ДИЗАЙН в левом нижнем углу.
Рисунок 7: Добавление новой таблицы
- Введите имя таблицы ( Customers ), как показано на рисунке 7.
- Оказывается, набор текста для клиентов мало что для меня сделал.
- Вы должны ждать следующего шага.
- Оказывается, набор текста для клиентов мало что для меня сделал.
- Затем нажмите NEW TABLE .
- Введите имя таблицы
- Клиенты
- Измените структуру таблицы, как показано на рисунке 8.
- Там должно быть только две колонки
- имя, nvarchar 128
- Там должно быть только две колонки
- Нажмите СОХРАНИТЬ наверху.
Рисунок 8: Таблица клиентов
- Теперь мы вставим некоторые данные .
- Нажмите НОВЫЙ ЗАПРОС вверху.
- Введите 3 оператора SQL Insert, которые вы видите на рисунке 9.
- Затем нажмите RUN .
Рисунок 9: Вставка данных в таблицу Customers.
- Теперь, когда в нашей таблице есть данные, мы можем обратить внимание на то, чтобы эти данные были доступны нашему веб-сервису.
- Нам нужно разрешить доступ к нашему серверу из веб-службы Azure.
- Нам нужно вернуться на главный экран портала Azure, как показано на рисунке 10.
Рисунок 10: Главный портал для управления нашей базой данных
- Обратите внимание, что в правом нижнем углу рисунка 10 вы можете увидеть:
- УПРАВЛЕНИЕ РАЗРЕШЕННЫМИ IP-АДРЕСАМИ
- Это позволяет нам определить, какие IP-адреса могут подключаться к нашему серверу.
- Напомним, что наш сервер это:
- ol9d1pjpmi.database.windows.net
Рисунок 11: Управление разрешенными IP-адресами
- Обратите внимание, что на рисунке 11 внизу написано: РАЗРЕШЕННЫЕ УСЛУГИ
- ДА означает, что нашей веб-службе Azure разрешено достигать нашего сервера, на котором у нас есть база данных.
- База данных
- brunoeasydblesson
- сервер
- ol9d1pjpmi.database.windows.net
- База данных
- ДА означает, что нашей веб-службе Azure разрешено достигать нашего сервера, на котором у нас есть база данных.
- Никаких дополнительных действий для базы данных не требуется
- Мы готовы построить наш веб-сервис Azure.
Создание веб-сервера ASP.NET Web API
Следующий раздел посвящен созданию веб-службы, которая будет предоставлять данные SQL нашим клиентам Windows 8 .
Рисунок 12: Создание нового облачного проекта
- В Visual Studio 2012 выберите ФАЙЛ / НОВЫЙ ПРОЕКТ
- Выберите ОБЛАЧНАЯ / WINDOWS AZURE CLOUD SERVICE
- Укажите имя
- Я позвонил в мою EASYWEB SERVICE
- См. Рисунок 12
Рисунок 13: Выбор веб-роли ASP.NET MVC 4
- Выберите веб-ролик ASP.NET MVC 4 и нажмите кнопку « ОК».
Рисунок 14: Выбор WEB API
- Выберите WEB API
- Это наш веб сервис
- Он будет читать данные SQL и возвращать их клиентам Windows 8
- Мы развернем эту услугу в центре обработки данных MS как облачный веб-сервис
Рисунок 15: ValuesController.cs
- Рисунок 15 показывает ValuesController.cs
- Это будет код, который выполняется после вызова клиента Windows 8 в веб-службу.
- В частности, он будет вызывать метод Get, как показано ниже
// GET api/values public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; }
- Мы изменим метод GET, чтобы получить данные из ранее созданной базы данных SQL
- Метод возвращает список строк
- Мы вернем список имен
- Сначала нам нужно получить строку подключения.
- Мы можем получить это на портале Windows Azure
Рисунок 16: Портал Windows Azure
- На рисунке 16 нажмите на ПОКАЗАТЬ СТРОКИ СОЕДИНЕНИЯ
Рисунок 17: Строка подключения, необходимая для веб-сервиса
Строка подключения будет необходимо с помощью кода SQL мы собираемся
добавить к методу GET .
Скопируйте строку в буфер обмена
- Сервер = tcp: ol9d1pjpmi.database.windows.net, 1433; База данных = BrunoEasyDBLesson; ID пользователя = DBAdministrator @ ol9d1pjpmi; Пароль = {ваш_пароль_ здесь }; Trusted_Connection = False; Encrypt = false; время ожидания подключения = 30;
- Я отправляю данные, не зашифрованные в этой демонстрации. Вот почему вы видите ENCRYPT = FALSE
Рисунок 18: Модифицированный метод Get ()
- Полный список кодов приведен ниже.
- Чтобы это работало, строка подключения имеет решающее значение
- Вам нужно будет принять к сведению:
- Имя базы данных
- Название сервера
- Имя пользователя
- пароль
- Настройка шифрования
// GET api/values public IEnumerable<string> Get() { DataTable table = new DataTable(); string _connStr = "Server=tcp:ol9d1pjpmi.database.windows.net,1433;Database=brunoeasydblesson;" + "User ID=DBAdministrator@ol9d1pjpmi;Password={ you get this from the portal};Trusted_Connection=False;Encrypt=false;Connection Timeout=30;"; // get the connection using (SqlConnection conn = new SqlConnection(_connStr)) { // write the sql statement to execute string sql = "SELECT firstname from Customers"; // instantiate the command object to fire using (SqlCommand cmd = new SqlCommand(sql, conn)) { // get the adapter object and attach the command object to it using (SqlDataAdapter ad = new SqlDataAdapter(cmd)) { // fire Fill method to fetch the data and fill into DataTable ad.Fill(table); } } } // Loop through and extract firstname as a list of strings List<string> results = new List<string>(); foreach (DataRow dr in table.Rows) { results.Add(dr[0].ToString()); } return results; }
Вам также необходимо добавить следующие операторы использования
using System.Data; using System.Data.SqlClient;
Развернуть в облаке
Теперь, когда мы создали наш веб-сервис, мы теперь развернем его в облаке. Для этого нам нужно вернуться на портал Windows Azure.
Рисунок 19: Создание нового облачного сервиса
- Мы выберем ОБЛАЧНЫЕ УСЛУГИ на левой панели
- Оттуда мы выберем NEW в левом нижнем углу
- Далее выберите БЫСТРЫЙ СОЗДАТЬ
- Укажите URL
- Я выбрал BRUNOEASYCLOUDLESSON
- Ваш будет другим
- Выберите регион
- Я выбрал WEST US, потому что я живу недалеко от Сан-Франциско.
- Затем нажмите CREATE CLOUD SERVICE.
- Это должно занять менее нескольких секунд
Рисунок 20: создан brunoeasycloudlesson
- Следующим шагом является упаковка нашего веб-сервиса, чтобы мы могли загрузить его в brunoeasycloudlesson
- Вернуться обратно в Visual Studio
- Щелкните правой кнопкой мыши на EASYWEBSERVICE и выберите PACKAGE
- Затем нажмите ПАКЕТ снова
Рисунок 21. Упаковка вашего приложения
Рисунок 22: Файлы пакетов, которые мы загрузим на портал для выполнения развертывания
- Файлы пакета теперь доступны для загрузки на портал
- На моем компьютере они здесь:
- C: \ Temp \ EasyWebService \ EasyWebService \ Bin \ Release \ app.publish
- Вы должны скопировать путь в буфер обмена
- На моем компьютере они здесь:
Рисунок 23: Загрузка файлов нашего пакета
- Обратите внимание, что теперь мы можем загружать файлы наших пакетов
- Нажмите на ЗАГРУЗИТЬ НОВЫЙ ПРОИЗВОДСТВЕННЫЙ РАЗМЕЩЕНИЕ
Рисунок 24: Завершение загрузки
- На рисунке 24 вы предоставите:
- Имя развертывания
- Файл пакета (созданный ранее)
- Конфигурационный файл (созданный ранее)
- Выберите DEPLOY ДАЖЕ, ЕСЛИ ОДНА РУДА БОЛЬШЕ РОЛЕЙ СОДЕРЖИТ ОДИН РАЗ
- Существует множество онлайн-материалов, касающихся понимания масштабирования в Azure.
- Вы нажмете ОТ МЕСТНОГО и выберите местоположение файла пакета.
Рисунок 25: Идет развертывание
- На этом этапе развертывание займет около 10 минут.
- Мы готовы обратить наше внимание на клиента Windows 8 для вызова в веб-сервис
Рисунок 26: Развертывание почти завершено
- Вы можете видеть, что URL теперь доступен для доступа на портале.
- Ваши будут другими, потому что они должны быть уникальными
- адрес сайта
- http://brunoeasycloudlesson.cloudapp.net/
- Чтобы получить доступ к методу GET () , введите:
- http://brunoeasycloudlesson.cloudapp.net/api/values
- На рисунке 27 обратите внимание, что я могу выбрать сохранение возвращенных данных JSON
- Обратите внимание на API / значения, добавленные в конце
- Это вызывает метод GET () для вызова
- Я закрою это развертывание, чтобы эти ссылки не работали, когда вы нажимаете на них
- Я хочу сэкономить деньги
- адрес сайта
Рисунок 27: Тестирование нашего развернутого сервиса
Давайте теперь создадим клиент Windows 8
Клиент Windows 8 вызовет веб-сервис, который, в свою очередь, вернется к нашему клиенту Windows 8.
Рисунок 28: Создание клиента Windows 8
- Запустите Visual Studio 2012
- Выберите FILE / NEW PROJECT / WINDOWS STORE / BLANK APP (XAML) , как показано на рисунке 28
- Установите следующую информацию
- название
- Windows8WebServiceClient
- Место на ваш выбор
Рисунок 29. Добавление элементов управления в MainPage.xaml (обратите внимание на элементы управления Button и ListView в TOOLBOX)
- Обратите внимание, что я дважды щелкнул MainPage.xaml
- Также обратите внимание, что у меня есть прикрепленный и видимый TOOLBOX
- Теперь мы перетащим элемент управления BUTTON и LISTVIEW.
- Кнопка вызова веб — службы для извлечения данных
- Элемент управления listview будет заполнен данными, возвращаемыми из веб-службы.
- В конечном итоге эти данные поступили из базы данных SQL
Рисунок 30: Добавлена кнопка и элемент управления списком
- Мы добавили кнопку и контроль списка
- Нажав клавишу f4 после выбора элемента управления, открывается окно свойств.
- Вот указанные свойства:
- кнопка
- х: Name = «butCallWebService»
- Контент = «Позвонить в веб-сервис»
- HorizontalAlignment = «Left»
- Margin = «214,123,0,0»
- VerticalAlignment = «Вверх»
- Высота = «180»
- Ширина = «515»
- FontSize = «36»
- Посмотреть список
- х: Name = «MyListView»
- HorizontalAlignment = «Left»
- Высота = «320»
- Margin = «214,340,0,0»
- VerticalAlignment = «Вверх»
- Ширина = «667»
- На рисунке 30 дважды щелкните кнопку, когда вы находитесь в режиме конструктора.
- Это создаст подпрограмму события, которая выполняется, когда пользователь нажимает кнопку
- XAML можно увидеть ниже
- кнопка
<Page x:Class="Windows8WebServiceClient.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Windows8WebServiceClient" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Button x:Name="butCallWebService" Content="Call Web Service" HorizontalAlignment="Left" Margin="214,123,0,0" VerticalAlignment="Top" Height="180" Width="515" FontSize="36" Click="butCallWebService_Click"/> <ListView x:Name="MyListView" HorizontalAlignment="Left" Height="320" Margin="214,340,0,0" VerticalAlignment="Top" Width="667"/> </Grid> </Page>
- MainPage.xaml.cs является кодом
- Метод butCallWebService_Click есть
using System; using System.Collections.Generic; using System.IO; using System.Linq; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; namespace Windows8WebServiceClient { public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { } private void butCallWebService_Click(object sender, RoutedEventArgs e) { // We will add our code here } } }
- В строке 28 нам нужно вставить наш код для вызова в веб-сервис
- Он проанализирует возвращаемые данные JSON и добавит их в элемент управления ListView.
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using Windows.Data.Json; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; namespace Windows8WebServiceClient { public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { } async private void butCallWebService_Click(object sender, RoutedEventArgs e) { // We will add our code here var client = new HttpClient(); client.MaxResponseContentBufferSize = 1024 * 1024; // Read up to 1 MB of data var response = await client.GetAsync(new Uri("http://brunoeasycloudlesson.cloudapp.net/api/values")); var result = await response.Content.ReadAsStringAsync(); // // Parse the JSON data // var webServiceResults = JsonArray.Parse(result); // // Loop through the data and add to ListView control // JsonArray array = webServiceResults; foreach (var item in array) { var obj = item.GetString(); MyListView.Items.Add(obj); } } } }
- Некоторые замечания по поводу кода
- Линия 33 будет отличаться от вашей
- У вас другое имя веб-службы и, следовательно, DNS / URL
Выполнение кода
Теперь пришло время насладиться плодами нашего труда. Начните с настройки Visual Studio 2012 для использования симулятора следующим образом:
Рисунок 31: Настройка симулятора
Рисунок 32: Готовое решение работает правильно
Миссия выполнена
Итак, вот и все. Я видел много вопросов, таких как StackOverflow, о людях, желающих использовать реляционные данные из SQL Server. Я представил простое комплексное решение, демонстрирующее, как это сделать.