Как подключиться к базе данных SQL server из приложения Windows 10 UWP

Я пытаюсь подключиться к базе данных MS SQL on-prem из универсального приложения windows. Я создаю приложение LOB с помощью UWP для поддержки рабочего стола, планшета и мобильного использования. При попытке подключиться к локальной (интрасети) базе данных SQL server я привык использовать экземпляр SqlConnection для подключения к локальному серверу, но поскольку sqlconnection не входит в подмножество .NET, используемое в UWP, как это делается при использовании UWP?

Я посмотрела официальный Microsoft образцы а также how-to guides, и ничего не нашел там о подключении к базе данных, которое не является базой данных Azure. DbConnection казалось, что это может быть хороший способ пойти, но не может быть использован, так как это абстрактно ,и это дети (например данные.В sqlclient.Объект sqlconnection), похоже, не входит в подмножество .NET для UWP.

Я пропустил что-то супер очевидное здесь? В стороне, кто-нибудь знает хорошее пространство имен ссылка на UWP?

Edit for non-duplicate: связанный вопрос, предложенный как дубликат, для Windows 8/8.1 Приложения, и хотя есть некоторые сходства, код в принятом ответе на этот вопрос не будет работать на UWP. Принцип тот же, однако, но должен быть лучший технический справочник для Windows 10 apps build с UWP.

4 ответов


С обновлением Windows 10 Fall Creators Update (build 16299) приложения UWP теперь могут получать доступ к SQL Server напрямую через стандартные сетевые классы (System.Данные.SqlClient) - благодаря недавно добавленной поддержке .NET Standard 2.0 в UWP.

вот демонстрационное приложение Northwind UWP: https://github.com/StefanWickDev/IgniteDemos

мы представили эту демонстрацию в Microsoft Ignite в сентябре 2017 года, вот запись нашей сессии (пропустите до 23: 00 для SQL демонстрация): https://myignite.microsoft.com/sessions/53541

вот код для извлечения продуктов из базы данных Northwind (см. DataHelper.cs в демо). Обратите внимание, что это точно такой же код, который вы бы написали для приложения Winforms или WPF-благодаря .NET Standard 2.0:

public static ProductList GetProducts(string connectionString)
{
    const string GetProductsQuery = "select ProductID, ProductName, QuantityPerUnit," +
        " UnitPrice, UnitsInStock, Products.CategoryID " +
        " from Products inner join Categories on Products.CategoryID = Categories.CategoryID " +
        " where Discontinued = 0";

    var products = new ProductList();
    try
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            if (conn.State == System.Data.ConnectionState.Open)
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = GetProductsQuery;
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var product = new Product();
                            product.ProductID = reader.GetInt32(0);
                            product.ProductName = reader.GetString(1);
                            product.QuantityPerUnit = reader.GetString(2);
                            product.UnitPrice = reader.GetDecimal(3);
                            product.UnitsInStock = reader.GetInt16(4);
                            product.CategoryId = reader.GetInt32(5);
                            products.Add(product);
                        }
                    }
                }
            }
        }
        return products;
    }
    catch (Exception eSql)
    {
        Debug.WriteLine("Exception: " + eSql.Message);
    }
    return null;
}

Если вам нужно поддерживать более ранние версии, чем обновление Fall Creators, есть также способ вызвать API SqlClient из пакета приложений UWP с помощью Рабочего Стола Мост. У меня есть образец для этого, опубликованный здесь: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/SQLServer


здесь простой пример и видео. Не уверен, что тебе этого достаточно.

вот трудный момент это

  • как использовать, сериализовать и десериализовать данные json. Как разработчик .net, вы можете рассмотреть возможность использования HttpClient для реализации этого. И вот еще один образец и видео для вашей справки. Есть еще один официальный пример показывает, как использовать Windows.Данные.формат JSON пространство имен.

Мне ехать по этой же дороге... С нетерпением ждем, когда SQLServer будет напрямую доступен через EF Core напрямую.

Я смотрел оба учебника выше, и так как я новичок в разработке, это только намочило мой аппетит. Однако я нашел это подробно Видео Уроке на YouTube, который проведет вас через;

  • создание веб-сервиса
  • создание дублированных классов POGO в WebService и приложении UWP
  • создание Контроллеры веб-API 2.0 Entity Framework для каждой таблицы, которую вы хотите создать
  • Добавление Newtonsoft.JSON и Microsoft.Сеть.HTTP через NuGet в ваше приложение UWP
  • и, наконец, выполнение вызовов из UWP обратно на локальный SQL Server через веб-службу / JSON вызывает код позади.

несмотря на то, что это видео не на английском языке, я смог посмотреть, что он делал, затем пауза и дублирование.


подключение UWP к SQL Server

Примечание: из Windows 10 Fall Creators Update (16299) мы можем напрямую обращаться к базе данных SQL Server с помощью .NetStanded 2.0

поскольку нет прямого способа подключения к SQL Server, нам нужно создать API для нашей базы данных для подключения к SQL Server.

это решение описывает

  1. создание API
  2. сериализация и десериализация JSON данные

1. Создание API

1) Установка ASP.NET и веб-разработка

  1. запуск Установщик Visual Studio и нажмите кнопку изменить enter image description here

  2. установить ASP.NET и веб-разработка enter image description here

2) Создание новых ASP.NET веб-приложение (.Net Framework)

  1. Добавить новый проект в своем решении enter image description here

  2. выбрать ASP.NET веб-приложение (.Net Framework) и дайте название проекта enter image description here

  3. выберите Web API и нажмите OK enter image description here

3) Подключение к SQL Server база данных

  1. Добавить новый элемент в папке модели enter image description here

  2. выбрать ADO.NET модель данных сущности и дать ему имя enter image description here

  3. выберите EF Designer из базы данных и нажмите кнопку Далее enter image description here

  4. клик новый Связи enter image description here

  5. настроить подключение, нажмите OK и нажмите Далее enter image description here

  6. выберите версию Entity Framework и нажмите кнопку Далее enter image description here

  7. выберите базы данных и таблицы для подключения и нажмите кнопку Готово enter image description here

4) Добавить Контроллеры для связи с моделями

  1. перестроить проект, прежде чем делать forther enter image description here

  2. Добавить новый контроллер в папке контроллеры enter image description here

  3. выберите контроллер Web API 2 с действиями, используя Entity Framework и выберите пункт Добавить enter image description here

  4. выберите модель класс!--15--> (имя таблицы) и класс контекста данных (имя базы данных) в раскрывающемся списке и нажмите кнопку Добавить enter image description here

5) тестирование API

  1. задайте этот проект как проекта enter image description here

  2. запустить проект в веб-браузере enter image description here

  3. теперь ваш браузер откроется сайт localhost. нажмите API в верхней enter image description here

  4. на этой странице отображаются все API, доступные в вашем проекте enter image description here

  5. скопируйте любую ссылку API снизу и замените ее на "Help" в URI и нажмите Enter. Теперь вы должны иметь возможность видеть свои данные из базы данных SQL Server enter image description here

2. Сериализация и десериализация JSON данные

1) установить Newtonsoft.В JSON

2) десериализация JSON

HttpClient httpClient = new HttpClient();
var jsonReponse = await httpClient.GetStringAsync("http://localhost:xxxxx/api/LogIns");
logInResult = JsonConvert.DeserializeObject<List<LogIn>>(jsonReponse);

вы можете получить модельный класс от моделей enter image description here

просто создайте тот же класс в своем проекте UWP

3) сериализация JSON

var logIn = new Models.LogIn()
{
    Username = "username",
    Password = "password"
};
var logInJson = JsonConvert.SerializeObject(logIn);

HttpClient httpClient = new HttpClient();
var httpContent = new StringContent(logInJson);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

await httpClient.PostAsync("http://localhost:56267/api/LogIns", httpContent);

подробнее о сериализация и десериализация JSON с использованием JSON.NET библиотека в C#