Consommation de services de données ADO.NET



Documents pareils
Déployer une application cliente avec le Framework.NET 3.5 Client Profile

Copyright 2009 Micro Application , rue des Petits-Hôtels Paris. 1 ère Édition - Février Auteurs - Loïc BAR, Simon BOIGELOT

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Le hub d entreprise est une application de déploiement des applications mais aussi un outil de communication

Paginer les données côté serveur, mettre en cache côté client

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Déploiement d application Silverlight

Création d un service web avec NetBeans 5.5 et SJAS 9

Gestion du cache dans les applications ASP.NET

Rapport de Mini-Projet en ArcGIS Engine

Hébergement et configuration de services WCF. Version 1.0

ADO.NET. Ado.net propose deux modes d'accès, le mode connecté et le mode déconnecté.

Rafraichissement conditionné d'une page en.net

La base de données XML exist. A. Belaïd

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Formation. Module WEB 4.1. Support de cours

Comment accéder à d Internet Explorer

Modélisation et Gestion des bases de données avec mysql workbench

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Un ordonnanceur stupide

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Notice d installation et d utilisation du blog nomade avec un nouveau blog

SPECIFICATIONS TECHNIQUES : Gestion des Médicaments et des commandes de médicaments

Flex. Lire les données de manière contrôlée. Programmation Flex 4 Aurélien VANNIEUWENHUYZE

PHP 5. La base de données MySql. A. Belaïd 1

1. Base de données SQLite

BIRT (Business Intelligence and Reporting Tools)

Le langage C. Séance n 4

COURS WINDEV NUMERO 3

Emprunter un livre numérique sur un appareil Android

les Formulaires / Sous-Formulaires Présentation Créer un formulaire à partir d une table...3

Utilitaires méconnus de StrataFrame

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Connaître la version de SharePoint installée

Réglages du portail de P&WC

Olivier Mondet

EXCEL TUTORIEL 2012/2013

Gestion de stock pour un magasin

SQL Server Installation Center et SQL Server Management Studio

Tutorial sur SQL Server 2000

Tapez le titre de la page «BASTIA ville méditerranéenne», puis allez deux fois à la ligne à l aide de la touche Entrée.

.NET - Classe de Log

Utiliser SQL Server 2008 R2 Reporting Services comme source de donne es pour Microsoft Excel

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var - E mail : bij@agasc.fr / Tel : CONSIGNE N 1 :

Services Windows et Domaines d application

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

Écriture de journal. (Virement de dépense)

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

Atelier «personnaliser l environnement de l ordinateur mai 2015

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Administration du site

Création et Gestion des tables

MO-Call pour les Ordinateurs. Guide de l utilisateur

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

OpenPaaS Le réseau social d'entreprise

MANUEL D UTILISATION - Précis Poste de Traitement d Images 1 - Déconvolution

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Tutoriel d installation de Hibernate avec Eclipse

Convers3 Documentation version Par Eric DAVID : vtopo@free.fr

Déploiement et monitoring

Sommaire. 2 LINQ to Objects

Les Threads. Sommaire. 1 Les Threads

Form Designer Guide d utilisateur DOC-FD-UG-FR-01/01/12

SOMMAIRE. Présentation assistée sur ordinateur. Collège F.Rabelais 1/10

Cours Apl 11 - Introduction à la gestion des écrans

Utiliser Reporting Services pour des NewsLetter

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

Construire une application marketing Facebook sur la plateforme Windows Azure

Fiche Technique. MAJ le30/03/2011

TRANSFOLIO version Introduction

Premiers Pas en Programmation Objet : les Classes et les Objets

SQL Data Export for PS/PSS

Utilisation du client de messagerie Thunderbird

et dépannage de PC Configuration Sophie Lange Guide de formation avec exercices pratiques Préparation à la certification A+

Restaurer des données

Portail du Consommateur. Guide d utilisation. Du dépôt de requêtes

OUTIL DE TRAVAIL COLLABORATIF

Les différents types de relation entre les tables

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

Créer et partager des fichiers

Arborescence et création de dossiers

PARAMETRAGE D INTERNET EXPLORER POUR L UTILISATION DE GRIOTTE

Introduction à ADO.NET

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0

Découvrir la messagerie électronique et communiquer entre collègues. Entrer dans le programme Microsoft Outlook Web Access

Saisie de données dans plusieurs tables

Documentation Liste des changements apportés

FAIRE SES COMPTES AVEC GRISBI

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Business Intelligence simple et efficace

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Certificats de signature de code (CodeSigning)

Modes Opératoires WinTrans Mai 13 ~ 1 ~

Transcription:

Consommation de services de données ADO.NET Version 1.0 Jean-Christophe VASSELON

2 ADO.Net Data Services Sommaire 1. Introduction... 3 2. La consommation d un service Ado.Net Data Services... 4 2.1 Démarrage du projet... 4 2.2 Consommation... 5 2.2.1 Organisation des données... 5 2.2.2 Consommation de manière Statique... 7 2.2.3 Consommation dynamique... 9 3. Conclusion... 14

3 ADO.Net Data Services 1. Introduction Dans cette partie nous allons voir comment consommer une application ADO.net Data Services dans un client riche. Pour ce faire, nous verrons son utilisation asynchrone dans une application Silverlight puis nous l implémenterons dans une application winforms plus classique.

4 ADO.Net Data Services 2. La consommation d un service Ado.Net Data Services 2.1 Démarrage du projet Nous allons rapidement passer sur la création d un service de données que l on a vu dans les deux précédents chapitres. Une fois que vous êtes sur un écran de ce type avec votre service de prêt, nous pouvons directement attaquer la partie Silverlight. Nous allons voir comment consommer un service ADODS de deux manières : - Statique. En utilisant des textblock et des boutons - Dynamique. En utilisant un DataGridView. Commençons par créer le projet Silverlight. Clic droit sur notre solution puis "ajouter un nouveau projet", et sélectionnez "Application Silverlight". Vous arrivez à cette fenêtre : Cliquez sur OK.

5 ADO.Net Data Services Faites ensuite un clic droit sur votre nouveau projet SilverLight puis cliquez sur "Ajouter une référence " et sélectionnez System.Data.Services.Client. Pour finir faites un clic droit sur votre projet Silverlight dans l explorateur de fichier puis sur "ajouter" et un "Elément existant " et récupérez votre classe Proxy.cs dans son dossier d enregistrement. Ajoutez aussi une référence de service en faisant un clic droit sur le projet Silverlight et entrez dans la barre d adresse, l adresse de votre service. Dans mon cas : http://57905:localhost/service1.svc. N oubliez pas de faire les "using" nécessaire en haut de votre page.xaml.cs. Notamment : using System.Data.Services.Client; using "nomdevotreprojetsilverlight"."nomdevotreservice"; using "nomdevotreprojetsilverlight" ;.Net Imports System.Data.Services.Client Imports "nomdevotreprojetsilverlight"."nomdevotreservice" Imports "nomdevotreprojetsilverlight" 2.2 Consommation 2.2.1 Organisation des données Pour commencer, nous allons organiser nos données dans un objet de type Dictionnary que nous pourrons ensuite parcourir. public Page() InitializeComponent(); VotreSourceDeDonnees entities = new VotreSourceDeDonnees (new Uri("votreService.svc", UriKind.Relative)); var query = (from u in entities.votretable select u); DataServiceQuery<VotreTable> userquery = (DataServiceQuery<VotreTable>)query; userquery.beginexecute(new AsyncCallback(OnLoadComplete), query);

6 ADO.Net Data Services Public Sub New() InitializeComponent() Dim entities As New VotreSourceDeDonnees(New Uri("votreService.svc", UriKind.Relative)) Dim query = (From u In entities.votretable _ Select u) Dim userquery As DataServiceQuery(Of VotreTable) = DirectCast(query, DataServiceQuery(Of VotreTable)) userquery.beginexecute(new AsyncCallback(OnLoadComplete), query) La première ligne permet l initialisation de notre composant Silverlight. La seconde ligne créé notre objet entities à partir de votre source de données et de son uri (ainsi que du type d uri, relatif ou absolu). La source de donnée de l exemple était VotreSourceDeDonnees. Ensuite on créé une requête de recherche qui récupère le contenu d une table. Et à la ligne en dessous, on stocke cette requête de recherche, dans un objet qui représente une requête dans un service de données. Finalement on exécute cette requête. Silverlight étant asynchrone, on fait appel à un callback qui nous permet d attendre que les données soient retournées. Regardons maintenant le code du callback OnLoadComplete : private void OnLoadComplete(IAsyncResult ar) DataServiceQuery<VotreTable> query = (DataServiceQuery<VotreTable>)ar.AsyncState; list = new Dictionary<int, VotreTable>(); foreach (var p in query.endexecute(ar).tolist()) list.add(p.id, p); Private Sub OnLoadComplete(ByVal ar As IAsyncResult) Dim query As DataServiceQuery(Of VotreTable) = DirectCast(ar.AsyncState, DataServiceQuery(Of VotreTable)) list = New Dictionary(Of Integer, VotreTable)() For Each p In query.endexecute(ar).tolist() list.add(p.id, p) Next Dans la première ligne on récupère l état de l opération asynchrone. Ensuite on créé un objet de type Dictionary pour récupérer et stocker les données de notre table. Le type Dictionary permet à la différence de la Liste d avoir les index du Dictionary qui correspondent aux ID de la table. (Par exemple, si les ID démarrent à 2, l élément 1 d une liste correspondrait à l ID 2 ce qui entrainerait un décalage). Puis on stocke simplement avec un foreach les valeurs dans le Dictionary. On n oublie pas de déclarer l objet list de type Dictionary en début de classe, et tant qu on y est, le début de l index du Dictionary.

7 ADO.Net Data Services public partial class Page : UserControl Dictionary<int, VotreTable> list; int index = 1; Public Class Page Inherits UserControl Private list As Dictionary(Of Integer, VotreTable) Private index As Integer = 1 End Class 2.2.2 Consommation de manière Statique 2.2.2.1 Lecture de données Nous allons maintenant voir comment nous pouvons afficher ces données. Commencez par créer un bouton et une TextBlock dans votre fichier.xaml, en mettant le code suivant dans votre Grid : <!-- xaml --> <TextBlock Height="32" Margin="146,113,167,0" VerticalAlignment="Top" Text="" x:name="afficheur" TextWrapping="Wrap"/> <Button Height="32" HorizontalAlignment="Left" Margin="121,36,0,0" VerticalAlignment="Top" Width="62" Content="Bouton" Click="Bouton"/> Retournez ensuite dans votre Page.xaml.cs puis créez la fonction adéquate : void Bouton(object sender, RoutedEventArgs e) Afficheur.Text = list[index]."donneesquevoussouhaitez"; index ++; Private Sub Bouton(ByVal sender As Object, ByVal e As RoutedEventArgs) Afficheur.Text = list(index).donneesquevoussouhaitez index += 1 De cette manière, à chaque appui sur ce bouton vous afficherez la donnée suivante de votre base. Il faudrait sécuriser avec des try/catch en C# et Try/Catch en VB.net pour les cas où les index seront absents. Mais ce n est qu un exemple pour illustrer les possibilités. De même, vous avez la possibilité de faire un bouton précédent qui décrémentera la variable index.

8 ADO.Net Data Services 2.2.2.2 Ajout de données Voyons maintenant comment ajouter des données à notre base. En reprenant l exemple d un ajout de membres. void Add(object sender, RoutedEventArgs e) entities.mergeoption = System.Data.Services.Client.MergeOption.OverwriteChanges; TestAstoriaModel.TableMembre _membres = new TestAstoriaModel.TableMembre(); _membres.password = "Nouveau mdp"; _membres.nommembre = "Nouvel utilisateur"; _membres.mail = "mail@domaine.extension"; entities.addobject("tablemembre", _membres); MessageBox.Show("Utilisateur ajouté"); entities.beginsavechanges(onsavechangescompleted, _membres); void OnSaveChangesCompleted(IAsyncResult result) entities.endsavechanges(result); Private Sub Add(ByVal sender As Object, ByVal e As RoutedEventArgs) entities.mergeoption = System.Data.Services.Client.MergeOption.OverwriteChanges Dim _membres As New TestAstoriaModel.TableMembre() _membres.password = "Nouveau mdp" _membres.nommembre = "Nouvel utilisateur" _membres.mail = "mail@domaine.extension" entities.addobject("tablemembre", _membres) MessageBox.Show("Utilisateur ajouté") entities.beginsavechanges(onsavechangescompleted, _membres) La première ligne s occupe de gérer les droits de modification. Ensuite on créé une instance de TableMembre. On met les données que l on souhaite. On pourra toujours les récupérer depuis des textbox, ou même un grid. L objet entities représente la source de donnée, il est déclaré en début de classe : TestAstoriaEntities entities = new TestAstoriaEntities(new uri("service1.svc", UriKind.Relative)); Dim entities As New TestAstoriaEntities(New uri("service1.svc", UriKind.Relative)) On appelle la méthode AddObject qui prend en paramètre la table que l on souhaite modifier et l objet instancié précédemment. Puis la fonction BeginSaveChanges qui appellera le callback OnSaveChangesCompleted avec en argument l objet instancié que l on souhaite enregistrer.

9 ADO.Net Data Services 2.2.3 Consommation dynamique Pour la mise à jour et la suppression de données, il est plus intéressant d utiliser un datagrid pour afficher, sélectionner et modifier ces données. Voici le code de la partie xaml : <!-- XAML --> <UserControl x:class="gridbox.page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:data="clrnamespace:system.windows.controls;assembly=system.windows.controls.data" Width="683" Height="300"> <Grid x:name="layoutroot" Background="White"> <Grid.RowDefinitions> <RowDefinition Height="8*" /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <data:datagrid x:name="datagrid" Margin="10" AutoGenerateColumns="True" ItemsSource="Binding" /> <Button Margin="145,0,0,0" Grid.Row="1" Content="Suppprimer" Click="Suprimer" Width="98" HorizontalAlignment="Left"/> <Button Margin="10,-1,0,0" Grid.Row="1" Content="Mise à jour" Click="Maj" Width="98" HorizontalAlignment="Left"/> </Grid> </UserControl> Et le code de génération du datagrid : namespace gridbox public partial class Page : UserControl TestAstoriaEntities entities = new TestAstoriaEntities(new Uri("Service.svc", UriKind.Relative)); List<TableMembre> list; public Page() InitializeComponent(); list = new List<TableMembre>(); Generer(); void Generer() var query = (from u in entities.tablemembre select u); DataServiceQuery<TableMembre> userquery = (DataServiceQuery<TableMembre>)query; userquery.beginexecute(new AsyncCallback(OnLoadComplete), query); //Suite page suivante

10 ADO.Net Data Services //Suite de la page précédente void OnLoadComplete(IAsyncResult ar) try DataServiceQuery<TableMembre> query = (DataServiceQuery<TableMembre>)ar.AsyncState; datagrid.columns.clear(); list.clear(); foreach (TableMembre p in query.endexecute(ar).tolist()) list.add(p); datagrid.itemssource = null; datagrid.itemssource = list; catch (Exception ex) MessageBox.Show(ErreurOnLoadComplete + " " + ex.tostring()); Namespace gridbox Partial Public Class Page Inherits UserControl Private entities As New TestAstoriaEntities(New Uri("Service.svc", UriKind.Relative)) Private list As List(Of TableMembre) Public Sub New() InitializeComponent() list = New List(Of TableMembre)() Generer() Private Sub Generer() Dim query = (From u In entities.tablemembre _ Select u) Dim userquery As DataServiceQuery(Of TableMembre) = DirectCast(query, DataServiceQuery(Of TableMembre)) userquery.beginexecute(new AsyncCallback(OnLoadComplete), query) 'Suite Page Suivante

11 ADO.Net Data Services 'Suite de la page précédente Private Sub OnLoadComplete(ByVal ar As IAsyncResult) Try Dim query As DataServiceQuery(Of TableMembre) = DirectCast(ar.AsyncState, DataServiceQuery(Of TableMembre)) datagrid.columns.clear() list.clear() For Each p As TableMembre In Query.EndExecute(ar).ToList() list.add(p) Next datagrid.itemssource = Nothing datagrid.itemssource = list Catch y As Exception MessageBox.Show("ErreurOnLoadComplete: " & y.tostring()) End Try End Class End Namespace On retrouve la méthode Generer() qui s occupe de récupérer les données de la table dans une liste en appelant le callback OnLoadComplete. Les nouveautés viennent de : - La ligne "list.clear()" qui s occupe de purger la liste avant de recharger des données dedans. - Des trois lignes commençant par datagrid. La première efface toutes les colonnes, la seconde met (ou remet) à null la source de données du datagrid, et la dernière recharge les données dans le datagrid. 2.2.3.1 Mise à jour de données Voici maintenant la méthode mise à jour appelée lors de l appui sur le bouton "Mise à jour". void Maj(object sender, RoutedEventArgs e) if (datagrid.selecteditem == null datagrid.selecteditems.count > 1) MessageBox.Show("Selectionnez une et une seule ligne à mettre à jour."); return; TableMembre ligneselect = (TableMembre)dataGrid.SelectedItem; try entities.updateobject(ligneselect); MessageBox.Show("Mise à jour en cours..."); entities.beginsavechanges(onsavechangescompleted, ligneselect); catch (DataServiceRequestException ex) MessageBox.Show("ErreurMaj : " + ex.response.tostring());

12 ADO.Net Data Services Private Sub Maj(ByVal sender As Object, ByVal e As RoutedEventArgs) If datagrid.selecteditem Is Nothing OrElse datagrid.selecteditems.count > 1 Then MessageBox.Show("Selectionnez une et une seule ligne à mettre à jour.") Exit Sub End If Dim ligneselect As TableMembre = DirectCast(dataGrid.SelectedItem, TableMembre) Try entities.updateobject(ligneselect) MessageBox.Show("Mise à jour en cours...") entities.beginsavechanges(onsavechangescompleted, ligneselect) Catch ex As DataServiceRequestException MessageBox.Show("ErreurMaj : " & ex.tostring()) End Try void OnSaveChangesCompleted(IAsyncResult result) try entities.endsavechanges(result); MessageBox.Show("Données mise à jour!"); catch (DataServiceRequestException ex) MessageBox.Show("ErreurOnSaveChangesCompleted: " + ex.response.tostring()); Generer(); Private Sub OnSaveChangesCompleted(ByVal result As IAsyncResult) Try entities.endsavechanges(result) MessageBox.Show("Données mise à jour!") Catch ex As DataServiceRequestException MessageBox.Show("ErreurOnSaveChangesCompleted: " & ex.response.tostring()) End Try Generer() On vérifie en premier lieu qu une et une seule ligne du datagrid soit sélectionnée. On récupère ensuite la ligne sélectionnée pour pouvoir mettre à jour les données correspondantes. On met donc à jour les données de l objet grâce à la méthode UpdateObject, puis on appelle un callback pour mettre à jour les données dans la base. A la fin de ce callback, on rappelle la fonction Generer() qui s occupera de réafficher le datagrid mis à jour.

13 ADO.Net Data Services 2.2.3.2 Suppression de données La fonction Supprimer() est très similaire à la fonction Maj() : void Supprimer(object sender, RoutedEventArgs e) if (datagrid.selecteditem == null datagrid.selecteditems.count > 1) MessageBox.Show("Selectionnez une et une seule ligne à supprimer."); return; try TableMembre selectedcategory = (TableMembre)dataGrid.SelectedItem; entities.deleteobject(selectedcategory); entities.beginsavechanges(onsavechangescompleted, selectedcategory); catch (Exception ex) MessageBox.Show("ErreurSupprimer: " + ex.tostring()); Private Sub Supprimer(ByVal sender As Object, ByVal e As RoutedEventArgs) If datagrid.selecteditem Is Nothing OrElse datagrid.selecteditems.count > 1 Then MessageBox.Show("Select a single row for update.") Exit Sub End If Try Dim selectedcategory As TableMembre = DirectCast(dataGrid.SelectedItem, TableMembre) entities.deleteobject(selectedcategory) entities.beginsavechanges(onsavechangescompleted, selectedcategory) Catch ex As Exception MessageBox.Show("ErreurSupprimer: " & ex.tostring()) End Try On retrouve donc la récupération de la ligne sélectionnée. La différence est dans l utilisation de la méthode DeleteObject à la place de UpdateObject. 2.2.3.3 Ajouter des données au DataGrid Pour ajouter des données au DataGrid, il suffit de reprendre le même système que la méthode statique, à savoir des TextBox. La méthode OnSavesChangesCompleted se chargeant de recharger le DataGrid.

14 ADO.Net Data Services 3. Conclusion Nous avons donc vu dans ce chapitre comment gérer de plusieurs manières l affichage et la gestion de données selon le principe du CRUD dans une application Silverlight. Vous pouvez maintenant gérer l affichage de votre service ADODS dans un DataGrid mais aussi permettre son parcours de manière linéaires grâce à des boutons Suivant/précédent.