Статьи

Чтение данных SQL Server из приложения Windows 8

 

  1. Меня часто спрашивают, как читать с SQL Server в приложении Windows 8 .
  2. Ожидается, что приложения Windows 8 будут запускаться непосредственно из Магазина Windows без ограничений, накладываемых подключением к локальным серверам через строку подключения.
  3. Рекомендуемый подход — выставить вашу базу данных через веб-сервис .
  4. Две технологии Microsoft, которые делают это:

    • Windows Communication Foundation
    • ASP.NET Web API (более современный подход)

      • Мы будем использовать эту технологию в этом посте.

Начнем с создания базы данных. Мы будем строить базу данных в MS Cloud с помощью Windows Azure.

образ

Рисунок 1: Портал Windows Azure, База данных SQL

  1. На рисунке 1 показан портал Windows Azure
  2. Мы выберем базу данных SQL
  3. В левом нижнем углу вы можете увидеть знак плюс со словом NEW
  4. Выберите NEW и назовите вашу базу данных

образ

Рисунок 2: Создание базы данных SQL

  1. На рисунке 2 мы создаем базу данных с именем BrunoEasyDBLession
  2. Если вам нужен видеоурок с более подробной информацией, смотрите ссылку ниже

  3. Обратите внимание, что я ранее создал сервер с именем:

    • ol9d1pjpmi.database.windows.net
  4. На рисунке 3 ниже показана созданная база данных.

образ

Рисунок 3: BrunoEasyDBLesson создан


образ

Рисунок 4: Детализация в базе данных для добавления таблиц

  1. Следующим шагом является создание некоторых таблиц и добавление данных для тестирования.
  2. Нажмите MANAGE, как показано на рисунке 4.

    • Это заняло у меня несколько попыток, чтобы я мог войти, как показано на рисунке 5
    • Имя пользователя и пароль были определены на SERVER уровне. Вы сделали этот шаг ранее. Обратите внимание, что это не имя пользователя и пароль базы данных. Это на уровне SERVER.

      • Смотрите ранее упомянутое видео для более подробной информации.
      • Мы не показали создание сервера в этом посте.

образ

Рисунок 5: Вход на сервер


образ

Рисунок 6: Портал управления базой данных

  1. На данный момент мы можем начать определять таблицы .
  2. Мы создадим таблицу с именем CUSTOMERS .
  3. Мы также добавим немного данных .
  4. Нажмите ДИЗАЙН в левом нижнем углу.

образ

Рисунок 7: Добавление новой таблицы

  1. Введите имя таблицы ( Customers ), как показано на рисунке 7.

    • Оказывается, набор текста для клиентов мало что для меня сделал.

      • Вы должны ждать следующего шага.
  2. Затем нажмите NEW TABLE .
  3. Введите имя таблицы
    • Клиенты
  4. Измените структуру таблицы, как показано на рисунке 8.

    • Там должно быть только две колонки

      • имя, nvarchar 128
  5. Нажмите СОХРАНИТЬ наверху.

образ

Рисунок 8: Таблица клиентов

  1. Теперь мы вставим некоторые данные .
  2. Нажмите НОВЫЙ ЗАПРОС вверху.
  3. Введите 3 оператора SQL Insert, которые вы видите на рисунке 9.
  4. Затем нажмите RUN .

образ

Рисунок 9: Вставка данных в таблицу Customers.


  1. Теперь, когда в нашей таблице есть данные, мы можем обратить внимание на то, чтобы эти данные были доступны нашему веб-сервису.
    • Нам нужно разрешить доступ к нашему серверу из веб-службы Azure.
  2. Нам нужно вернуться на главный экран портала Azure, как показано на рисунке 10.

образ

Рисунок 10: Главный портал для управления нашей базой данных

  1. Обратите внимание, что в правом нижнем углу рисунка 10 вы можете увидеть:

    • УПРАВЛЕНИЕ РАЗРЕШЕННЫМИ IP-АДРЕСАМИ
    • Это позволяет нам определить, какие IP-адреса могут подключаться к нашему серверу.
    • Напомним, что наш сервер это:

      • ol9d1pjpmi.database.windows.net

образ

Рисунок 11: Управление разрешенными IP-адресами

  1. Обратите внимание, что на рисунке 11 внизу написано: РАЗРЕШЕННЫЕ УСЛУГИ
    • ДА означает, что нашей веб-службе Azure разрешено достигать нашего сервера, на котором у нас есть база данных.

      • База данных

        • brunoeasydblesson
      • сервер

        • ol9d1pjpmi.database.windows.net
  2. Никаких дополнительных действий для базы данных не требуется
  3. Мы готовы построить наш веб-сервис Azure.

Создание веб-сервера ASP.NET Web API

Следующий раздел посвящен созданию веб-службы, которая будет предоставлять данные SQL нашим клиентам Windows 8 .

образ

Рисунок 12: Создание нового облачного проекта

  1. В Visual Studio 2012 выберите ФАЙЛ / НОВЫЙ ПРОЕКТ
    • Выберите ОБЛАЧНАЯ / WINDOWS AZURE CLOUD SERVICE
  2. Укажите имя

    • Я позвонил в мою EASYWEB SERVICE
  3. См. Рисунок 12

образ

Рисунок 13: Выбор веб-роли ASP.NET MVC 4

  1. Выберите веб-ролик ASP.NET MVC 4 и нажмите кнопку « ОК».

образ

Рисунок 14: Выбор WEB API

  1. Выберите WEB API
  2. Это наш веб сервис
  3. Он будет читать данные SQL и возвращать их клиентам Windows 8
  4. Мы развернем эту услугу в центре обработки данных MS как облачный веб-сервис

образ

Рисунок 15: ValuesController.cs

  1. Рисунок 15 показывает ValuesController.cs
  2. Это будет код, который выполняется после вызова клиента Windows 8 в веб-службу.
  3. В частности, он будет вызывать метод Get, как показано ниже
	// GET api/values
public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2" };
}
  1. Мы изменим метод GET, чтобы получить данные из ранее созданной базы данных SQL
  2. Метод возвращает список строк
    • Мы вернем список имен
  3. Сначала нам нужно получить строку подключения.
  4. Мы можем получить это на портале Windows Azure

образ

Рисунок 16: Портал Windows Azure

  1. На рисунке 16 нажмите на ПОКАЗАТЬ СТРОКИ СОЕДИНЕНИЯ

образ

Рисунок 17: Строка подключения, необходимая для веб-сервиса

Строка подключения будет необходимо с помощью кода SQL мы собираемся
добавить к методу GET .
Скопируйте строку в буфер обмена

  1. Сервер = tcp: ol9d1pjpmi.database.windows.net, 1433; База данных = BrunoEasyDBLesson; ID пользователя = DBAdministrator @ ol9d1pjpmi; Пароль = {ваш_пароль_ здесь }; Trusted_Connection = False; Encrypt = false; время ожидания подключения = 30;
  2. Я отправляю данные, не зашифрованные в этой демонстрации. Вот почему вы видите ENCRYPT = FALSE

образ

Рисунок 18: Модифицированный метод Get ()

  1. Полный список кодов приведен ниже.
  2. Чтобы это работало, строка подключения имеет решающее значение
  3. Вам нужно будет принять к сведению:

    • Имя базы данных
    • Название сервера
    • Имя пользователя
    • пароль
    • Настройка шифрования
	// 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: Создание нового облачного сервиса

  1. Мы выберем ОБЛАЧНЫЕ УСЛУГИ на левой панели
  2. Оттуда мы выберем NEW в левом нижнем углу
  3. Далее выберите БЫСТРЫЙ СОЗДАТЬ
  4. Укажите URL

    • Я выбрал BRUNOEASYCLOUDLESSON
    • Ваш будет другим
  5. Выберите регион

    • Я выбрал WEST US, потому что я живу недалеко от Сан-Франциско.
  6. Затем нажмите CREATE CLOUD SERVICE.
  7. Это должно занять менее нескольких секунд

образ 
Рисунок 20: создан brunoeasycloudlesson

  1. Следующим шагом является упаковка нашего веб-сервиса, чтобы мы могли загрузить его в brunoeasycloudlesson
  2. Вернуться обратно в Visual Studio
  3. Щелкните правой кнопкой мыши на EASYWEBSERVICE и выберите PACKAGE
  4. Затем нажмите ПАКЕТ снова

образ

Рисунок 21. Упаковка вашего приложения

образ

Рисунок 22: Файлы пакетов, которые мы загрузим на портал для выполнения развертывания

  1. Файлы пакета теперь доступны для загрузки на портал

    • На моем компьютере они здесь:

      • C: \ Temp \ EasyWebService \ EasyWebService \ Bin \ Release \ app.publish
    • Вы должны скопировать путь в буфер обмена

образ

Рисунок 23: Загрузка файлов нашего пакета

  1. Обратите внимание, что теперь мы можем загружать файлы наших пакетов
  2. Нажмите на ЗАГРУЗИТЬ НОВЫЙ ПРОИЗВОДСТВЕННЫЙ РАЗМЕЩЕНИЕ

образ

Рисунок 24: Завершение загрузки

  1. На рисунке 24 вы предоставите:

    • Имя развертывания
    • Файл пакета (созданный ранее)
    • Конфигурационный файл (созданный ранее)
    • Выберите DEPLOY ДАЖЕ, ЕСЛИ ОДНА РУДА БОЛЬШЕ РОЛЕЙ СОДЕРЖИТ ОДИН РАЗ
      • Существует множество онлайн-материалов, касающихся понимания масштабирования в Azure.
  2. Вы нажмете ОТ МЕСТНОГО и выберите местоположение файла пакета.

образ

Рисунок 25: Идет развертывание

  1. На этом этапе развертывание займет около 10 минут.
  2. Мы готовы обратить наше внимание на клиента Windows 8 для вызова в веб-сервис

образ

Рисунок 26: Развертывание почти завершено

  1. Вы можете видеть, что URL теперь доступен для доступа на портале.
  2. образ
  3. Ваши будут другими, потому что они должны быть уникальными

    • адрес сайта
      • http://brunoeasycloudlesson.cloudapp.net/
      • Чтобы получить доступ к методу GET () , введите:

      • Обратите внимание на API / значения, добавленные в конце

        • Это вызывает метод GET () для вызова
      • Я закрою это развертывание, чтобы эти ссылки не работали, когда вы нажимаете на них
      • Я хочу сэкономить деньги

 образ

Рисунок 27: Тестирование нашего развернутого сервиса


Давайте теперь создадим клиент Windows 8

Клиент Windows 8 вызовет веб-сервис, который, в свою очередь, вернется к нашему клиенту Windows 8.

образ

Рисунок 28: Создание клиента Windows 8

  1. Запустите Visual Studio 2012
  2. Выберите FILE / NEW PROJECT / WINDOWS STORE / BLANK APP (XAML) , как показано на рисунке 28
  3. Установите следующую информацию

    • название
      • Windows8WebServiceClient
    • Место на ваш выбор

образ Рисунок 29. Добавление элементов управления в MainPage.xaml (обратите внимание на элементы управления Button и ListView в TOOLBOX)

  1. Обратите внимание, что я дважды щелкнул MainPage.xaml
  2. Также обратите внимание, что у меня есть прикрепленный и видимый TOOLBOX
  3. Теперь мы перетащим элемент управления BUTTON и LISTVIEW.
    • Кнопка вызова веб — службы для извлечения данных
    • Элемент управления listview будет заполнен данными, возвращаемыми из веб-службы.
      • В конечном итоге эти данные поступили из базы данных SQL

образ 
Рисунок 30: Добавлена ​​кнопка и элемент управления списком

  1. Мы добавили кнопку и контроль списка
  2. Нажав клавишу f4 после выбора элемента управления, открывается окно свойств.
  3. Вот указанные свойства:

    • кнопка
      • х: 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>
  1. MainPage.xaml.cs является кодом
  2. Метод 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
        }
    }
}
  1. В строке 28 нам нужно вставить наш код для вызова в веб-сервис
  2. Он проанализирует возвращаемые данные 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);
            }
        }
    }
}
  1. Некоторые замечания по поводу кода
  2. Линия 33 будет отличаться от вашей

    • У вас другое имя веб-службы и, следовательно, DNS / URL

Выполнение кода

Теперь пришло время насладиться плодами нашего труда. Начните с настройки Visual Studio 2012 для использования симулятора следующим образом:

образ

Рисунок 31: Настройка симулятора

образ

Рисунок 32: Готовое решение работает правильно


Миссия выполнена
Итак, вот и все. Я видел много вопросов, таких как StackOverflow, о людях, желающих использовать реляционные данные из SQL Server. Я представил простое комплексное решение, демонстрирующее, как это сделать.