Comment se connecter à la base de données SQL server à partir D'une application UWP Windows 10
j'essaie de me connecter à une base de données MS SQL on-prem à partir d'une application windows universelle. Je fais une application LOB en utilisant UWP, pour soutenir le bureau, la tablette et l'utilisation mobile. Lorsque j'essaie de me connecter à une base de données locale (intranet) SQL server, j'ai l'habitude d'utiliser une instance de SqlConnection pour se connecter à un serveur local, mais puisque SqlConnection n'est pas inclus dans le sous-ensemble .NET utilisé dans UWP, comment est-ce fait lorsque vous utilisez UWP?
j'ai regardé sur le Microsoft officiel les échantillons ainsi que guides pratiques, et n'y a rien trouvé sur la connexion de base de données qui n'est pas une base de données Azure. DbConnection semblait qu'il pourrait être une bonne façon d'aller, mais ne peut pas être utilisé car il est abstrait, et c'est les enfants (par exemple Données.SqlClient.SqlConnection) ne semble pas être inclus dans le sous-ensemble .NET pour UWP.
est-ce que je manque quelque chose de très évident ici? En passant, quelqu'un sait-il d'un bon espace de noms de référence pour UWP?
Éditer pour non-dupliquer: la question liée suggérée comme dupliquer est Pour Windows 8/8.1 apps, et bien qu'il y ait quelques similitudes, le code dans la réponse acceptée pour cette question ne fonctionnera pas sur UWP. Le principe est le même, mais il devrait y avoir une meilleure référence technique pour les applications Windows 10 construites avec UWP.
4 réponses
avec Windows 10 Fall Creators Update (build 16299), les applications UWP peuvent désormais accéder au serveur SQL directement via les classes réseau standard (System.Données.SqlClient) - grâce au nouveau support pour .NET 2.0 dans UWP.
Voici une application de démonstration UWP de Northwind: https://github.com/StefanWickDev/IgniteDemos
nous avons présenté cette démo à Microsoft Ignite en septembre 2017, voici l'enregistrement de notre session (passer à 23: 00 pour le SQL démo): https://myignite.microsoft.com/sessions/53541
voici le code pour récupérer les produits de la base de données Northwind (voir DataHelper.cs dans la démo). Notez que c'est exactement le même code que vous écririez pour une Winforms ou une application WPF - grâce à la norme .net 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;
}
si vous avez besoin de supporter des versions plus anciennes que la mise à jour des créateurs D'automne, il y a aussi un moyen pour vous d'appeler les API SqlClient à partir de votre paquet d'application UWP, via le Bureau De Pont. J'ai un échantillon de ce qui a été publié ici: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/SQLServer
Voici un échantillon simple et vidéo. Vous ne savez pas si c'est assez pour vous.
voici un point difficile est
- comment consommer, sérialiser et désérialiser les données json. En tant que développeur.Net, vous pouvez envisager D'utiliser HttpClient pour implémenter ceci. Et c'est ici un autre échantillon et vidéo pour votre référence. Il n'y a un autre échantillon officiel montre comment utiliser Windows.Données.Json espace de noms.
je suis d'avoir à descendre cette même route... Nous espérons que SQLServer sera directement accessible via EF Core.
j'ai regardé les deux tutoriels ci-dessus et depuis que je suis nouveau dans le développement, il a seulement mouillé mon appétit. J'ai cependant trouvé cette détaillé Tutoriel Vidéo sur YouTube qui vous guide thru;
- création du WebService
- création d'dupliqué POGO classes dans WebService et votre UWP App
- création d' Web API 2.0 Entity Framework Controllers pour chaque Table que vous voulez créer
- Ajout De Newtonsoft.JSON et Microsoft.Net.HTTP via NuGet à votre application UWP
- et finalement faire des appels depuis UWP vers le serveur SQL Local via le service Web / appels JSON en Code derrière.
bien que cette vidéo ne soit pas en anglais, j'ai pu regarder ce qu'il faisait puis faire une pause et dupliquer.
Connecting UWP to SQL Server
Note: à partir de windows 10 Fall Creators Update (16299 )nous pouvons accéder directement à la base de données SQL Server en utilisant.NetStanded 2.0
comme il n'y a aucun moyen direct de se connecter à SQL Server, nous devons créer une API pour notre base de données afin de nous connecter à SQL Server.
cette solution décrit
- Creating API
- sérialiser et désérialiser JSON données
1. Creating API
1) Installation ASP.NET et développement web
2) Création de nouvelles ASP.NET Application Web (.Net Framework)
3) Se connecter au serveur SQL la base de données
sélectionner ADO.NET modèle de données D'entité et lui donner un nom
Sélectionner EF Concepteur de base de données et cliquez sur Suivant
Sélectionner Entity Framework version et cliquez sur suivant
Sélectionner les Bases de données et des Tableaux pour être connecté et Cliquez sur Terminer
4) Ajouter des contrôleurs pour communiquer avec les modèles
Ajouter un nouveau Contrôleur dans le dossier des contrôleurs
Sélectionnez Web API 2 Contrôleur avec des actions, à l'aide de Entity Framework et cliquez sur Ajouter
Sélectionner Modèle de classe (nom de la table) et classe de contexte des données (nom de la base de données) à partir de la liste déroulante et cliquez sur Ajouter
5) tester L'API
maintenant votre navigateur va ouvrir un site localhost. cliquez sur API en haut
cette page affiche toutes les API disponibles à partir de votre projet
Copiez n'importe quel lien de L'API ci-dessous et remplacez-le par "Aide" dans URI et appuyez sur Entrée. Vous devriez maintenant pouvoir voir vos données à partir de la base de données du serveur SQL
2. Sérialiser et Désérialiser les données JSON
1) Installer Newtonsoft.Json
2) désérialiser JSON
HttpClient httpClient = new HttpClient();
var jsonReponse = await httpClient.GetStringAsync("http://localhost:xxxxx/api/LogIns");
logInResult = JsonConvert.DeserializeObject<List<LogIn>>(jsonReponse);
Vous pouvez obtenir le modèle de classe à partir de Modèles
il suffit de créer la même classe dans votre projet UWP
3) Serializing 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);
pour en savoir plus sur JSON Serialization and Deserialization Using JSON.NET bibliothèque en C#