Vous êtes sur la page 1sur 38

Premiers pas avec ADO .

NET Data Services


Version 1.0

James RAVAILLE
http://blogs.dotnet-france.com/jamesr

Premiers pas avec ADO .NET Data Services

Sommaire

1 2

Introduction ..................................................................................................................................... 3 Ralisation dune application .......................................................................................................... 4 2.1 Prsentation ............................................................................................................................ 4 Cration de la base de donnes ...................................................................................... 4 Alimentation de la base de donnes ............................................................................... 6 Architecture de lapplication ........................................................................................... 6 Cration des projets ........................................................................................................ 7

2.1.1 2.1.2 2.1.3 2.1.4 3

Cration du service daccs et de gestion des donnes .................................................................. 8 3.1 3.2 3.3 3.4 Cration du composant Entity Data Model ............................................................................. 8 Cration du service dexposition des donnes...................................................................... 14 Dfinition des rgles daccs sur les entits.......................................................................... 16 Dfinir des oprations de service .......................................................................................... 17

Affichage et gestion des donnes ................................................................................................. 19 4.1 4.2 4.3 Cration dune rfrence de service ..................................................................................... 19 Cration dune classe de contexte pour les formulaires ....................................................... 21 Cration du formulaire FrmDetailStagiaire ........................................................................... 22 Design du formulaire ..................................................................................................... 22 Code-behind du formulaire ........................................................................................... 23

4.3.1 4.3.2 4.4

Cration du formulaire FrmGestionListeStagiaires ............................................................... 25 Design du formulaire ..................................................................................................... 25 Code-behind du formulaire ........................................................................................... 27

4.4.1 4.4.2 5

Excution de lapplication ............................................................................................................. 35 5.1 Excution des fonctionnalits de lapplication...................................................................... 35 Ajout dun stagiaire ....................................................................................................... 35 Modification dun stagiaire ........................................................................................... 36 Suppression dun stagiaire ............................................................................................ 37

5.1.1 5.1.2 5.1.3 5.2 6

Observation des traces HTTP ................................................................................................ 37

Conclusion ..................................................................................................................................... 38

Dotnet France Association James RAVAILLE

Premiers pas avec ADO .NET Data Services

1 Introduction
Ce cours permet de vous montrer, comment mettre en uvre de manire pratique ADO .NET Data Services, afin de vous permettre de comprendre ses principes fondamentaux. De manire volontaire, nous ne rentrerons pas dans les dtails. En revanche, les chapitres suivants publis sur Dotnet-France, dtailleront chacune des parties de ce document. Ce cours se dcompose de la manire suivante : Prsentation de lapplication de gestion, cre tout au long de ce cours. Cration du service de gestion de donnes ADO .NET. Ce service de donnes exposera les donnes obtenues au travers dun modle de donnes, cr avec le Framework Entity. Pour une bonne comprhension de ce cours, nous vous recommandons de consulter les cours publis sur Dotnet-France sur ce sujet. Cration dune application Windows Forms, qui affiche et gre les donnes, au travers du service de donnes ADO .NET.

Dotnet France Association James RAVAILLE

Premiers pas avec ADO .NET Data Services

2 Ralisation dune application


2.1 Prsentation
Lapplication que nous allons dvelopper tout au long de ce cours, aura pour but de consulter et de grer une liste de stagiaires, et des cours auxquels ils sont inscrits. Elle sera constitue de deux formulaires : Un affichant la liste des stagiaires. Un affichant les informations sur un stagiaire.

2.1.1

Cration de la base de donnes

2.1.1.1 Le modle conceptuel de donnes Le modle conceptuel des donnes (aussi appel MCD) permet de reprsenter de faon formelle, sous forme dun schma, les donnes qui seront utilises par une application. Ce schma est compos dentits, relies entre elles par des relations dassociation. Voici le modle conceptuel de donnes de notre application :
Stagiaire PK Identifiant Nom Prenom Cours

0..n Suit

0..n PK Identifiant
Libelle NombreJours

Ce modle dcrit les entits Stagiaire et Cours. Il met aussi en vidence : Quun stagiaire peut suivre un ou plusieurs cours. Quun cours peut tre suivi par aucun, un ou plusieurs stagiaires.

2.1.1.2 Le modle logique de donnes Nous allons maintenant crer le modle logique de donnes. La relation n-aire bilatrale entre les tables Stagiaire et Cours entrane la cration dune table supplmentaire, que nous appelons Stagiaire2Cours. Cette table agrge les champs constituant la cl primaire des tables Cours et Stagiaire. Le modle logique de donnes obtenu est donc le suivant :

Pour crer ce schma de base de donnes, lancer SQL Server Management Studio (interface dadministration de SQL Server). Crez une base de donnes nomme DotnetFrance, puis dans une fentre de requte, excutez le jeu dinstructions Transact-SQL suivant : Dotnet France Association James RAVAILLE

Premiers pas avec ADO .NET Data Services

-- SQL USE DotnetFrance CREATE TABLE [dbo].[Stagiaire]( [Identifiant] [int] IDENTITY(1,1) NOT NULL, [Nom] [varchar](50) NOT NULL, [Prenom] [varchar](50) NOT NULL, CONSTRAINT [PK_Stagiaire] PRIMARY KEY CLUSTERED ( [Identifiant] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY], CONSTRAINT [UQ__Stagiaire__7F60ED59] UNIQUE NONCLUSTERED ( [Identifiant] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO CREATE TABLE [dbo].[Cours]( [Identifiant] [int] IDENTITY(1,1) NOT NULL, [Libelle] [varchar](50) NOT NULL, [NombreJours] [int] NOT NULL, CONSTRAINT [PK_Cours] PRIMARY KEY CLUSTERED ( [Identifiant] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY], CONSTRAINT [UQ__Cours__023D5A04] UNIQUE NONCLUSTERED ( [Identifiant] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO CREATE TABLE [dbo].[Stagiaire2Cours]( [IdStagiaire] [int] NOT NULL, [IdCours] [int] NOT NULL, CONSTRAINT [PK_Stagiaire2Cours] PRIMARY KEY CLUSTERED ( [IdStagiaire] ASC, [IdCours] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[Stagiaire2Cours] WITH CHECK ADD [FK_Stagiaire2Cours_Cours] FOREIGN KEY([IdCours]) REFERENCES [dbo].[Cours] ([Identifiant]) ON UPDATE CASCADE ON DELETE CASCADE GO CONSTRAINT

ALTER TABLE [dbo].[Stagiaire2Cours] WITH CHECK ADD CONSTRAINT [FK_Stagiaire2Cours_Stagiaire] FOREIGN KEY([IdStagiaire]) REFERENCES [dbo].[Stagiaire] ([Identifiant]) ON UPDATE CASCADE ON DELETE CASCADE GO

Dotnet France Association James RAVAILLE

Premiers pas avec ADO .NET Data Services Voici une brve description des tables : Stagiaire : contient toutes les informations relatives aux stagiaires. Cours : contient toutes les informations relatives aux cours. Les stagiaires doivent suivre des cours afin de pouvoir travailler sur un projet dun client. Stagiaire2Cours : permet de lier les stagiaires un cours. Un stagiaire peut assister plusieurs cours, et un cours peut concerner plusieurs stagiaires.

2.1.2

Alimentation de la base de donnes Voici un jeu dinstructions Transact-SQL, permettant dalimenter les tables en donnes :

-- SQL -- Alimentation de la table des stagiaires. INSERT INTO Stagiaire(Nom, Prenom) VALUES ('DEROUX', 'Alain') INSERT INTO Stagiaire(Nom, Prenom) VALUES ('RAVAILLE', 'James') INSERT INTO Stagiaire(Nom, Prenom) VALUES ('SIRON', 'Karl') INSERT INTO Stagiaire(Nom, Prenom) VALUES ('EMATO', 'Julie') -- Alimentation de la table des stagiaires. INSERT INTO Cours (Libelle, NombreJours) VALUES Administration de serveurs', 5) INSERT INTO Cours (Libelle, NombreJours) VALUES INSERT INTO Cours (Libelle, NombreJours) VALUES INSERT INTO Cours (Libelle, NombreJours) VALUES INSERT INTO Cours (Libelle, NombreJours) VALUES -- Affectation des cours aux stagiaires. INSERT INTO Stagiaire2Cours (IdStagiaire, INSERT INTO Stagiaire2Cours (IdStagiaire, INSERT INTO Stagiaire2Cours (IdStagiaire, INSERT INTO Stagiaire2Cours (IdStagiaire, INSERT INTO Stagiaire2Cours (IdStagiaire, INSERT INTO Stagiaire2Cours (IdStagiaire, INSERT INTO Stagiaire2Cours (IdStagiaire, INSERT INTO Stagiaire2Cours (IdStagiaire, INSERT INTO Stagiaire2Cours (IdStagiaire, INSERT INTO Stagiaire2Cours (IdStagiaire, INSERT INTO Stagiaire2Cours (IdStagiaire,

('SQL Server ('XHTML / CSS', 3) ('C#', 5) ('ASP .NET 3.5', 5) ('ASP .NET AJAX', 3)

IdCours) IdCours) IdCours) IdCours) IdCours) IdCours) IdCours) IdCours) IdCours) IdCours) IdCours)

VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES

(1, (1, (2, (2, (2, (2, (3, (3, (3, (4, (4,

1) 3) 2) 1) 3) 4) 1) 4) 5) 4) 5)

2.1.3

Architecture de lapplication Voici larchitecture de lapplication :

Dotnet France Association James RAVAILLE

Premiers pas avec ADO .NET Data Services

Client_DataServices
Windows Forms

DotnetFrance_DataServices
Projet Web

DotnetFrance

Lapplication est compose de deux projets : Client_DataServices : projet permettant dafficher les donnes de la base de donnes DotnetFrance, et dinteragir avec les utilisateurs pour grer ces donnes. DotnetFrance_DataServices : projet Web, contenant le service de donnes ADO .NET, permettant de consulter et de grer les donnes dans la base de donnes DotnetFrance.

2.1.4

Cration des projets Dans Visual Studio 2008, crons deux projets : Un projet de type Windows Forms, nomm Client_DataServices. Dfinir ce projet comme projet de dmarrage. Un projet de type Site Web, nomm DotnetFrance_DataServices.

Dotnet France Association James RAVAILLE

Premiers pas avec ADO .NET Data Services

3 Cration du service daccs et de gestion des donnes


Dans ce chapitre, nous allons crer le service daccs aux donnes avec ADO .NET Data Services. Les tapes de cration de ce service sont les suivantes : Cration dun modle dentits. Cration du service dexposition des donnes.

3.1 Cration du composant Entity Data Model


Dans le projet DotnetFrance_DataServices, commenons par ajouter un composant de type Entity Data Model, nomm DotnetFrance. Ce composant constituera notre modle dentits, qui sera utilis ultrieurement par notre service de donnes ADO .NET :

Aprs avoir valid, la fentre suivante apparat :

Dotnet France Association James RAVAILLE

Premiers pas avec ADO .NET Data Services

Cliquons sur le bouton oui , pour simplifier le dveloppement et lutilisation ultrieure de ce service. La fentre suivante apparat alors :

Nous allons crer notre composant daccs et gestion de donnes partir de notre base de donnes DotnetFrance. Nous slectionnons alors litem Gnrer partir de la base de donnes , et cliquons sur le bouton Suivant . La fentre suivante apparat :

Dotnet France Association James RAVAILLE

10

Premiers pas avec ADO .NET Data Services

Dans cette fentre, choisir une connexion pointant vers notre base de donnes, ou alors crer une nouvelle connexion en cliquant sur le bouton Nouvelle connexion . Dans le second cas, la fentre suivante apparat :

Dotnet France Association James RAVAILLE

11

Premiers pas avec ADO .NET Data Services

Dans cette fentre, saisir le nom de votre instance SQL Server, sur laquelle votre base de donnes est hberge. Puis choisissez votre mode dauthentification, ainsi que la base de donnes. Cliquer sur le bouton Tester la connexion , afin de vrifier si toutes ces informations sont correctes. Cela est ncessaire, car elles seront utilises pour crer la chane de connexion. Une fois cette fentre valide, nous revenons la fentre suivante :

Dotnet France Association James RAVAILLE

12

Premiers pas avec ADO .NET Data Services

Cliquer alors sur le bouton Suivant . La fentre suivante apparat :

Dotnet France Association James RAVAILLE

13

Premiers pas avec ADO .NET Data Services

Choisissons les tables, vues et procdures stockes, que nous allons utiliser dans notre modle dentits. Dans notre exemple, nous allons grer les donnes contenues dans les tables Cours, Stagiaires et Stagiaire2Cours, que nous slectionnons. Cliquons ensuite sur le bouton Terminer .Le model suivant apparat :

Vous pouvez observer que la table de liaison Stagiaire2Cours, prsente dans le modle logique de donnes de la base de donnes, nest pas prsente. En effet, le Framework Entity se base sur une vision conceptuelle de la base de donnes. Limplmentation de ces classes est contenue dans le fichier DotnetFrance.Designer.cs ou DotnetFranceEntities.vb. En ouvrant ce fichier, on peut remarquer :

Dotnet France Association James RAVAILLE

14

Premiers pas avec ADO .NET Data Services Que toutes les classes dentit drivent de la classe System.Data.Objects.DataClasses.EntityObject. Quune classe supplmentaire est gnre. Elle porte le mme nom que le composant Entity Data Model prcdemment cr, suffix par Entities . Cette classe joue un rle essentiel dans laccs et la gestion des entits, car elle permet : o De dfinir un ensemble de membres communs. o De charger les entits dans un contexte de donnes. o Deffectuer un suivi des modifications effectues sur les entits. o

Ces informations sont importantes, car elles devront tre utilises ultrieurement, lors de la cration de lapplication Windows Forms, consommant notre service de donnes.

3.2 Cration du service dexposition des donnes


A la racine du projet DotnetFrance_DataServices, ajoutons un composant de type Service de donnes ADO .NET, nomm DataAcesssService.svc :

La cration de ce composant provoque la cration dun service WCF (Windows Communication Foundation), compos : Du point dentre du service, reprsent par le fichier DataAcesssService.svc. Du fichier DataAcesssService.cs, contenu dans le rpertoire App_Code, contenant la classe darrire plan de notre service, dont le code est le suivant (par dfaut) :

Dotnet France Association James RAVAILLE

15

Premiers pas avec ADO .NET Data Services

// C# using using using using using System; System.Data.Services; System.Collections.Generic; System.Linq; System.ServiceModel.Web;

public class DataAccessService : DataService< /* TODO : placez ici le nom de votre classe source de donnes */ > { // Cette mthode n'est appele qu'une seule fois pour initialiser les stratgies au niveau des services. public static void InitializeService(IDataServiceConfiguration config) { // TODO : dfinissez des rgles pour indiquer les jeux d'entits et oprations de service visibles, pouvant tre mis jour, etc. // Exemples : // config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead); // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All); } }

' VB .NET Imports System.Data.Services Imports System.Linq Imports System.ServiceModel.Web Public Class DataAccessService ' TODO : remplacez [[class name]] par le nom de votre classe de donnes Inherits DataService(Of [[class name]]) ' Cette mthode n'est appele qu'une seule fois pour initialiser les stratgies au niveau des services. Public Shared Sub InitializeService(ByVal config As IDataServiceConfiguration) ' TODO : dfinissez des rgles pour indiquer les jeux d'entits et oprations de service visibles, pouvant tre mis jour, etc. ' Exemples : ' config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead) ' config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All) End Sub End Class

La classe de notre composant daccs aux donnes ADO .NET tend la classe gnrique System.Data.Services.DataService<T>. Elle sera le point d'entre principal pour notre service de donnes ADO .NET. Le type prcis en paramtre correspond la classe permettant daccder et grer les donnes. Dans notre cas, il sagit de la classe de gestion des entits : DotnetFranceEntities. La dfinition de la classe obtenue est alors la suivante :

Dotnet France Association James RAVAILLE

16

Premiers pas avec ADO .NET Data Services

// C# using DotnetFranceModel; public class DataAccessService : DataService<DotnetFranceEntities> { }

' VB .NET Imports DotnetFranceModel Public Class DataAccessService Inherits DataService(Of DotnetFranceEntities) End Class

La classe DataAccessService contient une mthode statique nomme InitializeService, et acceptant en paramtre un objet de type IDataServiceConfiguration. Ce paramtre permet de dfinir les autorisations sur les entits et les verbes HTTP autoriss.

3.3 Dfinition des rgles daccs sur les entits


Notre modle dentits permet daccder et grer deux types dentits : des stagiaires et des cours. Nous allons dfinir les rgles suivantes : Autoriser la lecture / ajout / modification / suppression des stagiaires. Autoriser uniquement la lecture des cours, auxquels les stagiaires sont inscrits. Dans la mthode InitializeService, nous ajoutons les instructions suivantes :
// C# public static void InitializeService(IDataServiceConfiguration config) { config.SetEntitySetAccessRule("Stagiaire", EntitySetRights.All); config.SetEntitySetAccessRule("Cours", EntitySetRights.AllRead); }

' VB .NET Public Shared Sub InitializeService(ByVal config As IDataServiceConfiguration) config.SetEntitySetAccessRule("Stagiaire", EntitySetRights.All) config.SetEntitySetAccessRule("Cours", EntitySetRights.AllRead) End Sub

Dotnet France Association James RAVAILLE

17

Premiers pas avec ADO .NET Data Services

3.4 Dfinir des oprations de service


Dans la classe de votre service de donnes ADO .NET, vous pouvez ajouter une opration de service, en ajoutant une mthode, qui doit respecter les caractristiques suivantes : Elle doit tre publique. Pour les dveloppeurs C#, elle ne doit possder que des paramtres dentre (paramtres de sortie interdits). Il peut sagir dune procdure. Si elle est une fonction, le type de retour doit tre les interfaces gnriques IEnumerable<T> ou IQueryable<T>, o T ou une classe primitive telle qu'un entier ou une chane de caractres. Elle doit tre dfinie avec l'un des attributs de mthode suivants : o WebGet : permet d'appeler la mthode l'aide dune requte HTTP de type GET. o WebInvoke : permet d'appeler la mthode l'aide dune requte de type HTTP de type POST, PUT, MERGE, DELETE.

Voici un exemple : soit une mthode, permettant dobtenir le nombre de stagiaires tant inscrit au moins un cours :
// C# public class DataAccessService : DataService<DotnetFranceEntities> { // Cette mthode n'est appele qu'une seule fois pour initialiser les stratgies au niveau des services. public static void InitializeService(IDataServiceConfiguration config) { config.SetEntitySetAccessRule("Stagiaire", EntitySetRights.All); config.SetEntitySetAccessRule("Cours", EntitySetRights.AllRead); config.SetServiceOperationAccessRule("GetNombreStagiairesInscrits", ServiceOperationRights.All); } [WebGet] public int GetNombreStagiairesInscrits() { return this.CurrentDataSource.Stagiaire .Count(oStagiaire => oStagiaire.Cours.Count > 0); } }

Dotnet France Association James RAVAILLE

18

Premiers pas avec ADO .NET Data Services

' VB .NET Public Class DataAcesssService Inherits DataService(Of DotnetFranceEntities) ' Cette mthode n'est appele qu'une seule fois pour initialiser les stratgies au niveau des services. Public Shared Sub InitializeService(ByVal config As IDataServiceConfiguration) config.SetEntitySetAccessRule("Stagiaire", EntitySetRights.All) config.SetEntitySetAccessRule("Cours", EntitySetRights.AllRead) config.SetServiceOperationAccessRule("GetNombreStagiairesInscrits", ServiceOperationRights.All) End Sub <WebGet()> _ Public Function GetNombreStagiairesInscrits() As Integer Return Me.CurrentDataSource.Stagiaire.Count(Function(oStagiaire) oStagiaire.Cours.Count > 0) End Function End Class

Dotnet France Association James RAVAILLE

19

Premiers pas avec ADO .NET Data Services

4 Affichage et gestion des donnes


Dans le projet Client_DataServices, nous allons crer des formulaires daffichage et de gestion des donnes contenues dans la base de donnes DotnetFrance, au travers de notre service de donnes ADO .NET. Le projet Client_DataServices est compos de deux formulaires : Un formulaire nomm FrmGestionListeStagiaires. Il permet de consulter et grer la liste des stagiaires. Un formulaire nomm FrmDetailStagiaire, qui permet de consulter / modifier les informations relatives un stagiaire. Ce formulaire sera aussi utilis pour ajouter un stagiaire.

Afin de pouvoir utiliser les classes dentit dans le projet DotnetFrance_IHM, il est ncessaire dajouter une rfrence vers lassembly System.Data.Entity.dll du Framework .NET.

4.1 Cration dune rfrence de service


Pour accder et modifier les donnes, lapplication Client_DataServices devra consommer le service DataAccessService contenu dans lapplication DotnetFrance_DataServices. Pour ce faire, il est ncessaire dajouter dans le projet Client_DataServices une rfrence de service vers ce mme service. Dans lexplorateur de solution, affichons alors le menu contextuel du rpertoire Service References, et cliquons sur litem Ajouter une rfrence de service . La fentre suivante apparat :

Dotnet France Association James RAVAILLE

20

Premiers pas avec ADO .NET Data Services Dans cette fentre, recherchez ou spcifiez lurl du service de donnes rfrences. Puis, spcifier le nom de la rfrence de service : RefDotnetFrance_DataServices. Puis cliquez sur le bouton OK, pour valider la cration de cette rfrence de service. Les modifications suivantes sont alors apportes au projet : Dans lexplorateur de solution :

Ajout automatique des rfrences suivantes vers des composants du Framework .NET : o System.Data.Services.Client.dll o System.Runtime.Serialization.dll

La rfrence de service cre ci-dessus cre diffrents fichiers dans lapplication (affichez tous les fichiers dans lexplorateur de solutions pour lobserver :

Le fichier Reference.cs/Reference.vb contient trois classes proxy, contenues dans lespace de noms Client_DataServices.RefDotnetFrance_DataServices : DotnetFranceEntities, Stagiaire et Cours. Ces classes exposent les classes dentits exposes par le service de donnes ADO .NET. Dans les formulaires, nous manipulerons des objets crs partir de ces classes, pour afficher et grer les

Dotnet France Association James RAVAILLE

21

Premiers pas avec ADO .NET Data Services donnes. Et travers ces objets, nous consommerons le service de donnes ADO .NET, que vous venons de crer.

4.2 Cration dune classe de contexte pour les formulaires


Diffrents formulaires de notre application, vont partager des donnes et des fonctionnalits communes. Dans notre cas, nous allons partager une instance du contexte de donnes, que nous utiliserons pour lire et modifier les donnes. Pour faciliter ce partage, nous allons crer une classe de contexte que nous appellerons FrmContexte. Cette classe drive de la clase System.Windows.Forms.Form du Framework .NET, et sera la classe de base des deux autres formulaires de notre application. On obtient alors le diagramme de classes suivant :

A la racine du projet Client_DataServices, nous ajoutons un rpertoire nomm Contexte, dans lequel nous ajoutons un formulaire Windows nomm FrmContexte. Chaque instance de lapplication qui sexcute, doit possder une seule instance du contexte de donnes, cette instance devant tre unique pour tous les formulaires de lapplication. Ainsi, dans le formulaire FrmContexte, on ajoute le singleton suivant :

Dotnet France Association James RAVAILLE

22

Premiers pas avec ADO .NET Data Services

' VB .NET Private Shared _ContexteDonnees As DotnetFranceEntities Protected Shared Property ContexteDonnees() As DotnetFranceEntities Get If (FrmContexte._ContexteDonnees Is Nothing) Then FrmContexte._ContexteDonnees = New DotnetFranceEntities(New Uri(ConfigurationManager.AppSettings("UrlServiceDonnees"))) End If Return FrmContexte._ContexteDonnees End Get Private Set(ByVal value As DotnetFranceEntities) End Set End Property

Le contexte de donnes de lapplication est cr une seule fois, lors du premier accs. Vous remarquez quil est instanci avec une chane de caractre, correspondant lURL de notre service de donnes. Cette URL est dfinie dans le fichier de configuration de lapplication. Ainsi, vous devez : Ajouter un fichier de configuration, et y dfinir le contenu suivant :

' Fichier de configuration <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="UrlServiceDonnees" value="http://localhost/DotnetFrance_DataServices/DataAccessService.svc"/> </appSettings> </configuration>

Ajouter une rfrence vers le composant System.Configuration.dll du Framework .NET. Importer lespace de nom System.Configuration, afin de pouvoir utiliser la classe ConfigurationManager.

4.3 Cration du formulaire FrmDetailStagiaire


4.3.1 Design du formulaire Voici une prsentation de ce formulaire :

Dotnet France Association James RAVAILLE

23

Premiers pas avec ADO .NET Data Services

TxtIdentifiant TxtNom TxtPrenom

LstCours

CmdValider

CmdAnnuler

Voici quelques proprits des contrles de ce formulaire : Contrles TxtIdentifiant Proprits ReadOnly LstCours AllowUserToAddRows AllowUserToDeleteRows Columns False False Ajout de deux colonnes : - Libelle : lie la proprit Libelle - Dure : lie la proprit NombreJours BdsCours False True false FullRowSelect Valeurs True

DataSource MultiSelect ReadOnly RowHeadersVisible SelectionMode 4.3.2

Code-behind du formulaire Ce formulaire va grer les informations concernant les stagiaires. Nous allons donc : Crer un attribut de type Stagiaire, avec son accesseur. Initialiser cet attribut dans le constructeur. Implmenter lvnement Load, de manire utiliser le databinding pour :

Dotnet France Association James RAVAILLE

24

Premiers pas avec ADO .NET Data Services Afficher lidentifiant. Dans le cas dun ajout dun stagiaire, les caractres -- seront affichs. En effet, la colonne Identifiant de la table Stagiaire tant une colonne identit, lidentifiant du stagiaire sera dtermin par SQL Server lors de lajout du stagiaire. o Afficher le nom, prnom, et la liste des cours auxquels le stagiaire est inscrit. Implmenter lvnement Click sur le bouton CmdValider, afin denregistrer que lutilisateur confirme lajout / modification du stagiaire. Implmenter lvnement Click sur le bouton CmdAnnuler, afin denregistrer que lutilisateur annule lajout / modification du stagiaire. Voici le code behind de ce formulaire :
// C# public partial class FrmDetailStagiaire : FrmContexte { private Stagiaire _oStagiaire; public Stagiaire oStagiaire { get { return _oStagiaire; } set { _oStagiaire = value; } } public FrmDetailStagiaire(Stagiaire aStagiaire) { InitializeComponent(); // Initialisation des attributs. this.oStagiaire = aStagiaire; } private void FrmDetailStagiaire_Load(object sender, EventArgs e) { if (oStagiaire.Identifiant == 0) { TxtIdentifiant.Text = "--"; } else { TxtIdentifiant.DataBindings.Add("Text", this.oStagiaire, "Identifiant"); } TxtNom.DataBindings.Add("Text", this.oStagiaire, "Nom"); TxtPrenom.DataBindings.Add("Text", this.oStagiaire, "Prenom"); BdsCours.DataSource = this.oStagiaire.Cours; } private void CmdValider_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; } private void CmdAnnuler_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; } }

Dotnet France Association James RAVAILLE

25

Premiers pas avec ADO .NET Data Services

' VB .NET Public Class FrmDetailStagiaire Private _oStagiaire As Stagiaire Private Property oStagiaire() As Stagiaire Get Return Me._oStagiaire End Get Set(ByVal value As Stagiaire) Me._oStagiaire = value End Set End Property Public Sub New(ByVal aStagiaire As Stagiaire) ' Cet appel est requis par le Concepteur Windows Form. InitializeComponent() ' Ajoutez une initialisation quelconque aprs l'appel InitializeComponent(). Me.oStagiaire = aStagiaire End Sub Private Sub FrmDetailStagiaire_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If (oStagiaire.Identifiant = 0) Then TxtIdentifiant.Text = "--" Else TxtIdentifiant.DataBindings.Add("Text", Me.oStagiaire, "Identifiant") End If TxtNom.DataBindings.Add("Text", Me.oStagiaire, "Nom") TxtPrenom.DataBindings.Add("Text", Me.oStagiaire, "Prenom") BdsCours.DataSource = Me.oStagiaire.Cours End Sub Private Sub CmdValider_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdValider.Click Me.DialogResult = DialogResult.OK End Sub Private Sub CmdAnnuler_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdAnnuler.Click Me.DialogResult = DialogResult.Cancel End Sub End Class

4.4 Cration du formulaire FrmGestionListeStagiaires


4.4.1 Design du formulaire Voici une prsentation de ce formulaire :

Dotnet France Association James RAVAILLE

26

Premiers pas avec ADO .NET Data Services LstStagiaires

CmdFermer

Voici quelques proprits des contrles de ce formulaire : Contrles LstStagiaires Proprits AllowUserToAddRows AllowUserToDeleteRows Columns Valeurs False False Ajout de quatre colonnes : - Nom : lie la proprit Nom - Prnom : lie la proprit Prenom - Nombre de cours : NombreCours - Nombre de jours de NombreJoursDeCours BdsStagiaires False True False FullRowSelect

cours :

DataSource MultiSelect ReadOnly RowHeadersVisible SelectionMode

Le contrle de type BindingSource nomm BdsStagiaire, permet de simplifier la mise en uvre du databinding dans notre formulaire. Nous lutiliserons pour : Afficher la liste des stagiaires et des informations connexes. Ajouter / modifier / supprimer un stagiaire dans/de la liste. Obtenir tout moment un objet mtier (entit, objet fortement typ) correspondant au stagiaire slectionn dans la liste.

Le contrle de type ContextMenuStrip nomm MnuStagiaire, permet dafficher un menu contextuel sur un stagiaire slectionn dans la liste. Les items de ce menu permettent dajouter, modifier et supprimer un stagiaire.

Dotnet France Association James RAVAILLE

27

Premiers pas avec ADO .NET Data Services

4.4.2

Code-behind du formulaire

4.4.2.1 Pour obtenir lentit du stagiaire courante Nous allons crer un accesseur en lecture seule, permettant dobtenir lentit du stagiaire slectionn dans la liste :
// C# private Stagiaire StagiaireCourant { get { return (Stagiaire)BdsStagiaires.Current; } }

' VB .NET Private ReadOnly Property StagiaireCourant() As Stagiaire Get Return CType(BdsStagiaires.Current, Stagiaire) End Get End Property

4.4.2.2 Lors du chargement du formulaire Lors du chargement du formulaire, obtenir et afficher la liste des stagiaires. Pour ce faire, nous faisons appel la mthode statique GetListeInstances de la classe Stagiaire de notre modle dentits :
// C# private void FrmListeStagiaires_Load(object sender, EventArgs e) { try { // Affichage de la liste des stagiaires. BdsStagiaires.DataSource = ContexteDonnees.Stagiaire.ToList(); } catch (Exception aEx) { MessageBox.Show(aEx.Message); } }

Dotnet France Association James RAVAILLE

28

Premiers pas avec ADO .NET Data Services

' VB .NET Private Sub FrmGestionListeStagiaires_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try ' Affichage de la liste des stagiaires. BdsStagiaires.DataSource = ContexteDonnees.Stagiaire.ToList() Catch aEx As Exception MessageBox.Show(aEx.Message) End Try End Sub

4.4.2.3 Pour fermer le formulaire Voici limplmentation de lvnement Click sur le bouton intitul Fermer :
// C# private void CmdFermer_Click(object sender, EventArgs e) { // Fermeture du formulaire. this.Close(); }

' VB .NET Private Sub CmdFermer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdFermer.Click ' Fermeture du formulaire. Me.Close() End Sub

4.4.2.4 Gestion de laffichage du menu Le menu contextuel sur un stagiaire doit tre affich, uniquement un stagiaire est slectionn dans la liste. Voici limplmentation de lvnement Opening sur le menu MnuStagiaire :
// C# private void MnuStagiaire_Opening(object sender, CancelEventArgs e) { // Si aucun stagiaire n'est slectionn, alors on n'affiche pas le menu contextuel. e.Cancel = this.StagiaireCourant == null; }

Dotnet France Association James RAVAILLE

29

Premiers pas avec ADO .NET Data Services

' VB .NET Private Sub MnuStagiaire_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MnuStagiaire.Opening ' Si aucun stagiaire n'est slectionn, alors on n'affiche pas le menu contextuel. e.Cancel = Me.StagiaireCourant Is Nothing End Sub

4.4.2.5 Ajouter un stagiaire Pour ajouter un stagiaire, nous crons une instance de classe Stagiaire de notre modle dentits. Puis, nous grons les donnes contenues dans cet objet, via une instance du formulaire FrmDetailStagiaire. Aprs la fermeture cette fentre, si lutilisateur a cliqu sur le bouton Valider, alors le stagiaire est ajout dans la table Stagiaire du contexte de donnes, puis enregistr dans la base de donnes.
// C# private void ajouterToolStripMenuItem_Click(object sender, EventArgs e) { // Variables locales. Stagiaire oStagiaire; FrmDetailStagiaire oForm; DialogResult oResult; try { // Initialisation. oStagiaire = new Stagiaire(); // Cration du formulaire de dtail sur un stagiaire. oForm = new FrmDetailStagiaire(oStagiaire); // Affichage. oResult = oForm.ShowDialog(); if (oResult == DialogResult.OK) { // Ajout du stagiaire en base de donnes. ContexteDonnees.AddToStagiaire(oStagiaire); ContexteDonnees.SaveChanges(); // Affichage du stagiaire dans la grille. BdsStagiaires.Add(oStagiaire); } } catch (Exception aEx) { MessageBox.Show(aEx.Message); } }

Dotnet France Association James RAVAILLE

30

Premiers pas avec ADO .NET Data Services

' VB .NET Private Sub ajouterToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ajouterToolStripMenuItem.Click ' Variables locales. Dim oStagiaire As Stagiaire Dim oForm As FrmDetailStagiaire Dim oResult As DialogResult Try ' Initialisation. oStagiaire = New Stagiaire() ' Cration du formulaire de dtail sur un stagiaire. oForm = New FrmDetailStagiaire(oStagiaire) ' Affichage. oResult = oForm.ShowDialog() If (oResult = DialogResult.OK) Then ' Ajout du stagiaire en base de donnes. ContexteDonnees.AddToStagiaire(oStagiaire) ContexteDonnees.SaveChanges() ' Affichage du stagiaire dans la grille. BdsStagiaires.Add(oStagiaire) End If Catch aEx As Exception MessageBox.Show(aEx.Message) End Try End Sub

4.4.2.6 Modifier un stagiaire Pour modifier un stagiaire, nous rcuprons une instance de classe Stagiaire via notre accesseur StagiaireCourant. Puis, nous grons les donnes contenues dans cet objet, via une instance du formulaire FrmDetailStagiaire. Aprs la fermeture cette fentre, si lutilisateur a cliqu sur le bouton Valider, alors les modifications effectues sur le stagiaire sont enregistres dans le contexte de donnes, puis persistes dans la base de donnes. Le cas chant, ces modifications effectues sur les proprits du stagiaire sont annules.

Dotnet France Association James RAVAILLE

31

Premiers pas avec ADO .NET Data Services

// C# private void modifierToolStripMenuItem_Click(object sender, EventArgs e) { // Variables locales. Stagiaire oStagiaire; FrmDetailStagiaire oForm; DialogResult oResult; try { // Initialisation. oStagiaire = this.StagiaireCourant; if (oStagiaire != null) { // Cration du formulaire de dtail sur un stagiaire. oForm = new FrmDetailStagiaire(oStagiaire); // Affichage. oResult = oForm.ShowDialog(); if (oResult == DialogResult.OK) { // Enregistrement des modifications dans la base de donnes. ContexteDonnees.UpdateObject(oStagiaire); ContexteDonnees.SaveChanges(); } else { // Annulation des modifications. ContexteDonnees.LoadProperty(oStagiaire, "Nom"); ContexteDonnees.LoadProperty(oStagiaire, "Prenom"); BdsStagiaires.ResetCurrentItem(); } } } catch (Exception aEx) { MessageBox.Show(aEx.Message); } }

Dotnet France Association James RAVAILLE

32

Premiers pas avec ADO .NET Data Services

' VB .NET Private Sub modifierToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles modifierToolStripMenuItem.Click ' Variables locales. Dim oStagiaire As Stagiaire Dim oForm As FrmDetailStagiaire Dim oResult As DialogResult Try ' Initialisation. oStagiaire = Me.StagiaireCourant ' Cration du formulaire de dtail sur un stagiaire. oForm = New FrmDetailStagiaire(oStagiaire) ' Affichage. oResult = oForm.ShowDialog() If (oResult = DialogResult.OK) Then ' Enregistrement des modifications dans la base de donnes. ContexteDonnees.UpdateObject(oStagiaire) ContexteDonnees.SaveChanges() Else ' Annulation des modifications. ContexteDonnees.LoadProperty(oStagiaire, "Nom"); ContexteDonnees.LoadProperty(oStagiaire, "Prenom"); BdsStagiaires.ResetCurrentItem(); End If Catch aEx As Exception MessageBox.Show(aEx.Message) End Try End Sub

4.4.2.7 Supprimer un stagiaire Pour supprimer un stagiaire, nous rcuprons une instance de classe Stagiaire via notre accesseur StagiaireCourant. Une demande de confirmation est effectue. Si lutilisateur valide son choix de suppression, alors le stagiaire est supprim de la base de donnes. Notez que dans la base de donnes, toutes les relations dassociation entres les tables de notre modle acceptent la suppression en cascade. De ce fait, nous ne supprimons pas les inscriptions des stagiaires aux cours, avant de supprimer un stagiaire.

Dotnet France Association James RAVAILLE

33

Premiers pas avec ADO .NET Data Services

// C# private void supprimerToolStripMenuItem_Click(object sender, EventArgs e) { // Variables locales. Stagiaire oStagiaire; DialogResult oResult; try { // Initialisation. oStagiaire = this.StagiaireCourant; if (oStagiaire != null) { // Demande de confirmation. oResult = MessageBox.Show("Etes-vous srs de vouloir supprimer ce stagiaire ?", "Demande de confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (oResult == DialogResult.Yes) { // Suppression du stagiaire dans la base de donnes. oStagiaire.Supprimer(); // Suppression du stagiaire dans la grille. BdsStagiaires.RemoveCurrent(); } } } catch (Exception aEx) { MessageBox.Show(aEx.Message); } }

Dotnet France Association James RAVAILLE

34

Premiers pas avec ADO .NET Data Services

' VB .NET Private Sub supprimerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles supprimerToolStripMenuItem.Click ' Variables locales. Dim oStagiaire As Stagiaire Dim oResult As DialogResult Try ' Initialisation. oStagiaire = Me.StagiaireCourant If (oStagiaire IsNot Nothing) Then ' Demande de confirmation. oResult = MessageBox.Show("Etes-vous srs de vouloir supprimer ce stagiaire ?", "Demande de confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If (oResult = DialogResult.Yes) Then ' Suppression du stagiaire dans la base de donnes. ContexteDonnees.DeleteObject(oStagiaire) ContexteDonnees.SaveChanges() ' Suppression du stagiaire dans la grille. BdsStagiaires.RemoveCurrent() End If End If Catch aEx As Exception MessageBox.Show(aEx.Message) End Try End Sub

Dotnet France Association James RAVAILLE

35

Premiers pas avec ADO .NET Data Services

5 Excution de lapplication
5.1 Excution des fonctionnalits de lapplication
Avant deffectuer les manipulations prsentes ci-dessous, nous activons les traces HTTP dans lapplication DotnetFrance_DataServices. Dans le fichier de configuration Web de cette application Web, dans llment system.web :
' Fichier de configuration <trace enabled="true" />

Lors de lexcution de lapplication, la fentre de gestion des stagiaires apparat :

5.1.1

Ajout dun stagiaire En cliquant sur litem Ajouter, la fentre suivante apparat. Nous spcifions un nom et un prnom, puis nous validons :

Dotnet France Association James RAVAILLE

36

Premiers pas avec ADO .NET Data Services

5.1.2

Modification dun stagiaire Puis en cliquant sur litem Modifier du menu contextuel sur le stagiaire que nous venons de crer, nous pouvons modifier son prnom :

Dotnet France Association James RAVAILLE

37

Premiers pas avec ADO .NET Data Services 5.1.3 Suppression dun stagiaire Puis en cliquant sur litem Supprimer du menu contextuel sur le stagiaire que nous venons de crer, nous le supprimons.

5.2 Observation des traces HTTP


Aprs ces manipulations, dans un navigateur Web, nous pouvons visualiser les traces HTTP enregistres via lURL suivante : http://localhost/DotnetFrance_DataServices/Trace.axd. On obtient le rsultat suivant :

On peut observer que la premire requte HTTP envoye, permet daccder la liste des stagiaires, contenue dans la base de donnes. La seconde requte permet dajouter un stagiaire dans la base de donnes. La troisime permet de persister les modifications effectues sur un stagiaire, dont lidentifiant est 12. La dernire permet de supprimer un stagiaire, dont lidentifiant est 12.

Dotnet France Association James RAVAILLE

38

Premiers pas avec ADO .NET Data Services

6 Conclusion
Tout au long de ce cours, nous avons vu comment : Crer un modle de donnes avec Entity Data Model (EDM). Exposer des donnes au travers de service ADO .NET.

Ce cours constitue une entre en matire sur ADO .NET Data Services. Les prochains cours publis sur Dotnet-France dtailleront diffrents points simplement prsents dans ce support (scurit, requtes daccs aux donnes dfinition des droits sur les donnes, ).

Dotnet France Association James RAVAILLE