Как подключиться к базе данных 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.
это решение описывает
- создание API
- сериализация и десериализация JSON данные
1. Создание API
1) Установка ASP.NET и веб-разработка
2) Создание новых ASP.NET веб-приложение (.Net Framework)
3) Подключение к SQL Server база данных
4) Добавить Контроллеры для связи с моделями
выберите контроллер Web API 2 с действиями, используя Entity Framework и выберите пункт Добавить
выберите модель класс!--15--> (имя таблицы) и класс контекста данных (имя базы данных) в раскрывающемся списке и нажмите кнопку Добавить
5) тестирование API
теперь ваш браузер откроется сайт localhost. нажмите API в верхней
на этой странице отображаются все API, доступные в вашем проекте
скопируйте любую ссылку API снизу и замените ее на "Help" в URI и нажмите Enter. Теперь вы должны иметь возможность видеть свои данные из базы данных SQL Server
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);
вы можете получить модельный класс от моделей
просто создайте тот же класс в своем проекте 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#