web-dev-qa-db-fra.com

Comment se connecter à la base de données SQL Server à partir d'une application Windows 10 UWP

J'essaie de me connecter à une base de données MS SQL sur site à partir d'une application Windows universelle. Je crée une application LOB en utilisant UWP, pour prendre en charge l'utilisation sur ordinateur, tablette et mobile. Lorsque vous essayez de vous connecter à une base de données de serveur SQL local (intranet), j'ai l'habitude d'utiliser une instance de SqlConnection pour vous connecter à un serveur local, mais puisque SqlConnection n'est pas inclus dans le sous-ensemble .NET utilisé dans UWP, comment cela se fait-il lorsque vous utilisez UWP?

J'ai examiné les exemples officiels Microsoft ainsi que les guides pratiques , et je n'ai rien trouvé sur la connexion à la base de données qui n'est pas une base de données Azure. DbConnection semblait être une bonne façon de procéder, mais ne peut pas être utilisé car il est abstrait et ses enfants (par exemple Data.SqlClient.SqlConnection ) ne le font pas semblent être inclus dans le sous-ensemble .NET pour UWP.

Suis-je en train de manquer quelque chose de super évident ici? En passant, quelqu'un connaît-il une bonne référence d'espace de noms pour UWP?

Modifier pour les non-doublons: la question liée suggérée comme doublon concerne les applications Windows 8/8.1, et bien qu'il existe des similitudes, le code de la réponse acceptée pour cette question ne fonctionnera pas sur UWP. Le principe est le même, cependant, mais il devrait y avoir une meilleure référence technique pour les applications Windows 10 construites avec UWP.

13
Tobbe

Avec la mise à jour Windows 10 Fall Creators Update (build 16299), les applications UWP peuvent désormais accéder à SQL Server directement via les classes NET standard (System.Data.SqlClient) - grâce à la nouvelle prise en charge de .NET Standard 2.0 dans UWP.

Voici une application de démonstration Northwind UWP: https://github.com/StefanWickDev/IgniteDemos

Nous avons présenté cette démo à Microsoft Ignite en septembre 2017, voici l'enregistrement de notre session (passez à 23h00 pour la démo SQL): 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 application Winforms ou WPF - grâce au .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;
}

Si vous devez prendre en charge des versions antérieures à la mise à jour Fall Creators, il existe également un moyen d'appeler les API SqlClient à partir de votre package d'application UWP, via Desktop Bridge. J'ai un échantillon pour cela publié ici: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/SQLServer

12
Stefan Wick MSFT

Voici un exemple simple et ne vidéo . Je ne sais pas si cela vous suffit.

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 le HttpClient pour l'implémenter. Et voici n autre échantillon et vidéo pour votre référence. Il y a n autre échantillon officiel montre comment utiliser l'espace de noms Windows.Data.Json.
4
Alan Yao - MSFT

Je dois emprunter la même voie également ... Dans l'attente que SQLServer soit directement accessible via EF Core directement.

J'ai regardé les deux tutoriels ci-dessus et depuis que je suis nouveau dans le développement, cela ne fait que mordre l'appétit. J'ai cependant trouvé ce détail Tutoriel vidéo sur YouTube qui vous guide à travers;

  • création du WebService
  • création de classes POGO dupliquées dans WebService et votre application UWP
  • création de contrôleurs Entity Framework Web API 2.0 pour chaque table que vous souhaitez créer
  • Ajout de Newtonsoft.JSON et Microsoft.Net.HTTP via NuGet à votre application UWP
  • et enfin faire des appels depuis UWP vers Local SQL Server via des appels Web Service/JSON dans Code Behind.

Bien que cette vidéo ne soit PAS en anglais, j'ai pu regarder ce qu'il faisait, puis faire une pause et dupliquer.

2
ekgcorp

Connexion d'UWP à SQL Server

Remarque: à partir de Windows 10 Fall Creators Update (16299), nous pouvons accéder directement à la base de données SQL Server à l'aide de .NetStanded 2.0

Comme il n'y a pas de moyen direct de se connecter à SQL Server, nous devons créer une API pour notre base de données afin de se connecter à SQL Server.

Cette solution décrit

  1. Création d'API
  2. Sérialiser et désérialiser les données JSON

1. Création d'API

1) Installation d'ASP.NET et développement Web

  1. Lancez Visual Studio Installer et cliquez sur Modifier enter image description here

  2. Installer ASP.NET et le développement Web enter image description here

2) Création d'une nouvelle application Web ASP.NET (.Net Framework)

  1. Ajoutez un nouveau projet dans votre solution enter image description here

  2. Sélectionnez Application Web ASP.NET (.Net Framework) et donnez un nom de projet enter image description here

  3. Sélectionnez l'API Web et cliquez sur OK enter image description here

3) Connexion à la base de données SQL Server

  1. Ajouter un nouvel élément dans le dossier Modèles enter image description here

  2. Sélectionnez ADO.NET Entity Data Model et donnez-lui un nom enter image description here

  3. Sélectionnez EF Designer dans la base de données et cliquez sur Suivant enter image description here

  4. Cliquez sur Nouvelle connexion enter image description here

  5. Configurez votre connexion , cliquez sur OK puis sur Suivant enter image description here

  6. Sélectionnez la version Entity Framework et cliquez sur suivant enter image description here

  7. Sélectionnez les bases de données et les tables à connecter et cliquez sur Terminer enter image description here

4) Ajoutez des contrôleurs pour communiquer avec les modèles

  1. Reconstruisez votre projet avant de le faire enter image description here

  2. Ajouter un nouveau contrôleur dans le dossier Contrôleurs enter image description here

  3. Sélectionnez Web API 2 Controller avec des actions, en utilisant Entity Framework et cliquez sur Ajouter enter image description here

  4. Sélectionnez Classe de modèle (nom de la table) et Classe de contexte de données (nom de la base de données ) dans la liste déroulante et cliquez sur Ajouter enter image description here

5) Test de l'API

  1. Définissez ce projet comme projet de démarrage enter image description here

  2. Exécutez le projet dans un navigateur Web enter image description here

  3. Maintenant, votre navigateur ouvrira un site localhost. Cliquez sur API en haut enter image description here

  4. Cette page affiche toutes les API disponibles à partir de votre projet enter image description here

  5. Copiez n'importe quel lien API ci-dessous et remplacez-le par "Aide" dans l'URI et appuyez sur Entrée. Vous devriez maintenant pouvoir voir vos données à partir de la base de données SQL Server enter image description here

2. Sérialiser et désérialiser les données JSON

1) Installer Newtonsoft.Json

2) Désérialisation de JSON

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

Vous pouvez obtenir la classe de modèle à partir des modèles enter image description here

Créez simplement la même classe dans votre projet UWP

3) Sérialisation de 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 plus d'informations sur Sérialisation et désérialisation JSON à l'aide de la bibliothèque JSON.NET en C #

1
Vijay Nirmal