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.
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
Voici un exemple simple et ne vidéo . Je ne sais pas si cela vous suffit.
Voici un point difficile est
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;
Bien que cette vidéo ne soit PAS en anglais, j'ai pu regarder ce qu'il faisait, puis faire une pause et dupliquer.
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
Sélectionnez EF Designer dans la base de données et cliquez sur Suivant
Configurez votre connexion , cliquez sur OK puis sur Suivant
Sélectionnez la version Entity Framework et cliquez sur suivant
Sélectionnez les bases de données et les tables à connecter et cliquez sur Terminer
Sélectionnez Web API 2 Controller avec des actions, en utilisant Entity Framework et cliquez sur Ajouter
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
Maintenant, votre navigateur ouvrira un site localhost. Cliquez sur API en haut
Cette page affiche toutes les API disponibles à partir de votre projet
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
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
Créez simplement la même classe dans votre projet UWP
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 #