Как использовать System.Data.SQLClient с vb.net в Visual Studio UWP? [Дубликат]

Представьте, что у вас есть продукт под названием «Zebra», который может быть дополнен плагинами. Он находит плагины, ища библиотеки DLL в некоторых каталогах. Он загружает все эти DLL и использует отражение для поиска любых классов, которые реализуют IZebraPlugin, а затем вызывает методы этого интерфейса для связи с плагинами.

Это делает его полностью независимым от какого-либо конкретного класса плагина - ему все равно, что представляют собой классы. Он заботится только о том, чтобы они соответствовали спецификации интерфейса.

Интерфейсы - это способ определения точек расширяемости, подобных этому. Код, который говорит с интерфейсом, более слабо связан - на самом деле он не связан вообще с каким-либо другим конкретным кодом. Он может взаимодействовать с плагинами, написанными годами позже людьми, которые никогда не встречались с оригинальным разработчиком.

Вместо этого вы можете использовать базовый класс с виртуальными функциями - все плагины будут получены из базового класса. Но это гораздо более ограничивает, потому что класс может иметь только один базовый класс, тогда как он может реализовать любое количество интерфейсов.

10
задан Tobbe 1 October 2015 в 13:02
поделиться

4 ответа

С Windows 10 Fall Creators Update (сборка 16299) UWP-приложения теперь могут напрямую обращаться к SQL Server через стандартные классы NET (System.Data.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, существует также способ вызывать API SqlClient из вашего пакета приложений UWP через Bridge Desktop. У меня есть образец для этого опубликованного здесь: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/SQLServer

10
ответ дан Stefan Wick MSFT 20 August 2018 в 17:51
поделиться
  • 1
    Большая демонстрация, но с использованием Desktop Bridge уничтожит цель UWP - «Универсальная платформа Windows». – Vijay Nirmal 8 October 2017 в 08:11
  • 2
    Новая поддержка в обновлении Fall Creators не требует использования Desktop Bridge и работает на всех целевых устройствах. Кроме того, создание приложений UWP, предназначенных только для настольных компьютеров (или целевых только для IoT и т. Д.), Является полностью допустимым и поддерживаемым сценарием. Вот почему платформа имеет атрибут TargetDeviceFamily в манифесте и почему у нас есть SDK для расширения устройства (для рабочего стола, IoT и т. Д.). Разработчик имеет гибкость, чтобы решить, на что они хотят нацеливаться, мы не намереваемся настраивать таргетинг на все устройства. И, честно говоря, для сценариев LOB большинство клиентов стремятся ориентироваться прежде всего на настольные компьютеры. – Stefan Wick MSFT 8 October 2017 в 16:49
  • 3
    Прямо из уст лошади :) Спасибо за обновление! Принимая это как правильный ответ, поскольку это, по-видимому, является официальным способом сделать это. – Tobbe 9 October 2017 в 06:04
  • 4
    @StefanWickMSFT Да, но фрагмент кода будет приятным. – Vijay Nirmal 9 October 2017 в 16:00
  • 5
    Добавлен соответствующий фрагмент ответа. Обратите внимание, что это тот же самый код, который можно было бы написать для Winforms в течение последних 15 лет - благодаря .NET Standard 2.0. Нет новых понятий, чтобы учиться на это. – Stefan Wick MSFT 9 October 2017 в 16:30

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

Здесь трудная точка

  • как использовать, сериализовать и десериализовать json-данные. В качестве разработчика .net вы можете использовать HttpClient для его реализации. И вот другой образец и видео для вашей справки. еще один официальный образец показывает, как использовать пространство имен Windows.Data.Json.
4
ответ дан Alan Yao - MSFT 20 August 2018 в 17:51
поделиться
  • 1
    Это по крайней мере на правильном пути. Но, как я писал в моем редактировании, большая часть этого кода для 8.1 и не будет создавать для UWP. Однако это начало, и я соглашусь с этим, если через какое-то время ничего не получится. – Tobbe 1 October 2015 в 13:04
  • 2
    Это привело меня к правильному пути, примет это вместо того, чтобы написать свой собственный ответ. Спасибо за попытку! – Tobbe 7 October 2015 в 11:00
  • 3
    Привет, В дорожной карте Entity Framework 7 говорится, что она будет поддерживать UWP. А в разделе «Поставщики баз данных» - поддержка SQLServer, SQLLite и InMemory из коробки. Поэтому мы можем ожидать, что другие провайдеры будут поддерживать EF7 в ближайшее время, и UWP будет иметь прямое соединение с БД вместо пути WebService. github.com/aspnet/EntityFramework/wiki/Roadmap – Venkat 4 November 2015 в 05:58
  • 4
    Entity Framework 7 переименована в Entity Framework Core 1.0 – Tony 4 February 2017 в 21:47

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

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

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

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

2
ответ дан ekgcorp 20 August 2018 в 17:51
поделиться

Подключение 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 и нажмите «Изменить»
  2. Установить ASP.NET и веб-разработка

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

  1. Добавить новое проект в вашем решении
  2. Выберите веб-приложение ASP.NET (.Net Framework) и укажите имя проекта
  3. Выберите веб-сайт API и нажмите OK

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

  1. Добавить новый элемент в папку моделей
  2. Выберите модель данных сущности ADO.NET и дайте ей имя
  3. Выберите EF Designer из базы данных и нажмите «Далее»
  4. Нажмите «Новое соединение»
  5. Настройте соединение, нажмите «ОК» и нажмите «Далее»
  6. Выберите «Сущность» версии и нажмите кнопку
  7. Выберите базы данных и таблицы для подключения и нажмите «Готово» [/ g4 9]

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

  1. Восстановить проект перед выполнением forther
  2. Добавить новый контроллер в папке Controllers
  3. Выберите Web API 2 Controller с действиями, используя Entity Framework и нажмите «Добавить»
  4. Выберите класс модели (таблица имя) и класс контекста данных (имя базы данных) из раскрывающегося списка и нажмите Добавить

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

  1. Задайте этот проект как проект запуска
  2. Запустите проект в веб-браузере
  3. Теперь ваш браузер откроет локальный сайт. Нажмите API в верхней части
  4. На этой странице показан весь API, доступный из вашего проекта
  5. Скопируйте любую ссылку API снизу и замените с помощью «Справка» в URI и нажмите «Ввод». Теперь вы можете увидеть свои данные из базы данных SQL Server

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

1) Установить Newtonsoft.Json

2) Deserializing JSON

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

Вы можете получить класс модели из моделей

Просто создайте тот же класс в проекте 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 #

0
ответ дан Vijay Nirmal 20 August 2018 в 17:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: