Académique Documents
Professionnel Documents
Culture Documents
Version 1.1
Sommaire
Introduction ..................................................................................................................................... 3 1.1 1.2 Rappels propos de LINQ ....................................................................................................... 3 LINQ to SQL.............................................................................................................................. 3
LINQ to SQL...................................................................................................................................... 3 2.1 Importer des tables ................................................................................................................. 3 Le concepteur Objet/Relationnel en mode graphique.................................................... 3 Le SQLMetal..................................................................................................................... 7
Grer le concepteur Objet/Relationnel ................................................................................... 9 Ajout de liaisons entre les tables..................................................................................... 9 Ajout de mthodes ........................................................................................................ 10
Lobjet DataContext ......................................................................................................... 11 Les requtes .......................................................................................................................... 12 Ajouter des donnes ..................................................................................................... 12 Modifier des donnes.................................................................................................... 12 Supprimer des donnes................................................................................................. 13
Conclusion ..................................................................................................................................... 14
1 Introduction
1.1 Rappels propos de LINQ
LINQ a t cr afin de proposer de nouvelles solutions plusieurs problmes. En effet, les moyens de stockage de donnes sont trs diversifis : il existe plusieurs logiciels de bases de donnes (dont chacune possde leur syntaxe) et le XML. De plus, lorsquon souhaite accder aux donnes, nos requtes sont considres comme de simples chanes de caractres pouvant contenir des erreurs et entrainer de grandes difficults les corriger. Ensuite, le changement de source de donnes (par exemple ODBC vers Oracle) peut impliquer quelques modifications dans le code de votre application. LINQ (Language Integrated Query) permet de rsoudre ces problmes car il possde une syntaxe qui permet dutiliser lIntelliSense de Visual Studio et qui est compatible, sans changement de code, avec tout type de source de donnes. Les mots-cls utiliss par le LINQ sont dcrits et expliqus dans le chapitre LINQ to Objects. La base de donnes qui sera utilise est dcrite dans le chapitre ADO.NET Base de donnes. Pour plus dinformation propos du LINQ, vous pouvez consulter le chapitre Introduction au LINQ .
2 LINQ to SQL
2.1 Importer des tables
Comme il a t dit dans lintroduction, afin dutiliser le LINQ, vous devez commencer par importer ou crer des classes correspondant vos tables. Vous pouvez crer manuellement vos classes comme il est dusage, mais cela peut prendre beaucoup de temps, cest pourquoi il est plus intressant de les importer car cela vous gnrera automatiquement le code ncessaire. Il existe deux mthodes pour importer vos classes : Le concepteur Objet/Relationnel en mode graphique Le SQLMetal
2.1.1
Le concepteur Objet/Relationnel en mode graphique Il faut bien noter que ce concepteur nest utilisable que pour SQL Server 2000, 2005, 2008 et Express. Il sera automatiquement lanc lorsque vous ajouterez dans votre projet un fichier de type .dbml . Cet outil est divis en deux parties : une partie va contenir les classes reprsentant les tables alors que lautre partie servira garder les procdures. Le tout reprsente ce quon appel le DataContext gnr.
Chapitre 03 - LINQ to SQL Pour crer un fichier de type .dbml , il faut faire un clic droit sur votre projet puis Ajouter et enfin Nouvel lment :
Pour continuer, slectionner Classes LINQ to SQL puis faire Ajouter . Pour notre projet, nous nommerons le fichier Test.dbml . Comme prcis prcdemment, vous pouvez apercevoir voir distinctement les deux parties : une pour les classes lautre pour les procdures.
Chapitre 03 - LINQ to SQL Il est ensuite possible laide du Server Explorer de dplacer graphiquement les tables vers la partie gauche du fichier .dbml :
Dans notre cas, nous avons pris la base de donnes nomm DotNetFrance , nous avons donc aprs le Drag and Drop de nos tables :
Comme vous pouvez le voir, la relation faite avec SQL Server 2005 apparat automatiquement.
Chapitre 03 - LINQ to SQL Le mode graphique va aussi plus loin en vous proposant une Bote outils approprie :
Attention toutefois, si vous tentez dinsrer une classe provenant dune autre base de donnes, cela gnrera un message vous proposant de remplacer la connexion dj existante. Lorsque vous ajouterez une table, le concepteur gnrera le code ncessaire afin que le DataContext puisse initialiser les proprits de linstance de la classe et pour que les modifications faites sur ces proprits se rpercutent sur la base de donnes. Pour faire des mises jour, chaque classe insre possde trois proprits : Delete , Insert et Update .
2.1.2
Le SQLMetal Vous ne pouvez utiliser cet outil qu partir du Visual Studio Command Prompt . Il est disponible partir de votre menu dmarrer :
Chapitre 03 - LINQ to SQL Les options que vous pouvez utiliser permettent de configurer le fonctionnement. Toutes les options ont cette structure : /VotreOption : SaValeur . Voici la liste des options possibles :
Option Code
Description Il prend comme valeur le nom dun fichier afin quil gnre le code source des classes contenues. Cette option permet de remplacer les options Database, Password, Server et User sous forme de chaine de caractres. Il prend comme valeur le nom du DataContext qui sera gnr. Il prend comme valeur le nom de votre base de donnes. Il prend comme valeur le nom dun fichier de mappage. Il prend comme valeur le nom de la classe de base de toutes les classes gnres. Il prend comme valeur le langage dans lequel le code sera gnr (seules valeurs possibles csharp ou vb ). Il prend comme valeur le nom de lespace de nom dans lequel les classes seront gnres. Il prend comme valeur le mot de passe associ un compte utilisateur. Il prend comme valeur le nom ou lIP de votre serveur. Il prend comme valeur le temps durant lequel SQLMetal tentera dtablir une connexion. Il prend comme valeur le compte utilisateur avec lequel se connecter la base de donnes.
Conn
Language
Namespace
Password
Server Timeout
User
Chapitre 03 - LINQ to SQL Par exemple, nous pouvons faire ceci avec la base de donnes LINQtoSQL, voici la requte :
VB
SqlMetal /server:.\SQLServeur /database:DotNetFrance /language:vb /code:"C:\Documents and Settings\Cdric GERAUD\Mes documents\Visual Studio 2008\Projects\ListerFournisseur\ListerFournisseur\Program.cs"
//C#
SqlMetal /server:.\SQLServeur /database:DotNetFrance /language:csharp /code:"C:\Documents and Settings\Cdric GERAUD\Mes documents\Visual Studio 2008\Projects\ListerFournisseur\ListerFournisseur\Program.cs"
Comme dit prcdemment, si des relations entre les tables de votre base de donnes existaient dj elles seront gnres automatiquement. Le concepteur permet aussi den crer de nouvelles qui sont similaires aux liaisons des bases de donnes classiques. Il est possible dajouter ces liaisons en faisant clic droit une des tables puis en faisant Ajouter :
10
Ensuite, par exemple, nous avons cliqu sur Association qui ouvre un autre menu nous permettant de configurer les relations :
2.2.2
Ajout de mthodes Il est possible, grce au concepteur, de transformer les fonctions ainsi que les procdures stockes en mthodes du DataContext . Pour cela, il suffit, comme pour vos tables, de prendre la procdure stocke (dans notre cas ProcedureMethode ), puis de la faire glisser vers la partie droite de votre concepteur. Cette mthode permettra ds son appel dexcuter notre procdure stocke. Il faut par contre noter deux points : Le type de retour est, comme la mthode, gnr automatiquement Si votre procdure est dfinie par des paramtres, ces paramtres devront tre spcifis dans votre mthode.
Par exemple :
11
Mthodes CreateDatabase
Description Permet de crer une base de donnes sur un serveur. Permet de savoir si une base de donnes peut tre ouverte. Permet de supprimer une base de donnes. Permet dexcuter des commandes SQL sur une base de donnes. Permet dexcuter des commandes SQL sur une base de donnes lorsquil est surcharg. Permet de rcuprer un accs aux objets modifis dans le DataContext . Permet de rcuprer les informations sur des commandes SQL faites par LINQ. Permet de traiter les objets modifis puis de rpercuter ces modifications sur la base de donnes.
DatabaseExists
DeleteDatabase ExecuteCommand
ExecuteQuery
GetChangeSet
GetCommand
SubmitChanges
12
2.4.1
Ajouter des donnes Nous utilisons le C# 3.0 pour notre code. Pour ajouter des donnes notre table Employe de la base donnes DotNetFrance , il faut tout dabord instancier notre base de donnes dans le DataContext . Ensuite :
//C#
DotNetFrance maBaseDeDonnees = new DotNetFrance(); maBaseDeDonnees.Log = Console.Out; Employe nouvelEmploye = new Employe { Nom = "Test", Prenom = "Test", Role = 1 }; maBaseDeDonnees.Employe.InsertOnSubmit(nouvelEmploye); maBaseDeDonnees.SubmitChanges();
VB
Dim maBaseDeDonnees As DotNetFrance = New DotNetFrance() maBaseDeDonnees.Log = Console.Out Dim nouvelEmploye As Employe = New with Employe { Nom = "Test", Prenom = "Test", Role = 1 } maBaseDeDonnees.Employe.InsertOnSubmit(nouvelEmploye) maBaseDeDonnees.SubmitChanges()
Le SubmitChanges permet la modification dans la base de donnes comme vu dans le tableau prcdent.
2.4.2
Modifier des donnes Afin de modifier des donnes, il faut avant tous les obtenir grce une requte de slection. Avec les objets sous forme dinstance de classes, il ny a plus qu modifier leurs proprits.
13
Chapitre 03 - LINQ to SQL Par exemple, nous allons modifier le rle dun employ de notre table Employe :
//C#
DotNetFrance maBaseDeDonnees = new DotNetFrance(); maBaseDeDonnees.Log = Console.Out; var requete = (from unEmploye in maBaseDeDonnees.Employe where unEmploye.Role == 0 select unEmploye); foreach (var unEmploye in requete) { unEmploye.Role = 1; } maBaseDeDonnees.SubmitChanges();
VB
Dim maBaseDeDonnees As DotNetFrance = New DotNetFrance() maBaseDeDonnees.Log = Console.Out Dim requete = From unEmploye In maBaseDeDonnees.Employes Where unEmploye.Role = 0 Select unEmploye For Each unEmploye In requete unEmploye.Role = 1 Next maBaseDeDonnees.SubmitChanges()
2.4.3
Supprimer des donnes La mthode pour supprimer des donnes est la mme que pour les modifier. Voici un exemple :
//C#
DotNetFrance maBaseDeDonnees = new DotNetFrance(); maBaseDeDonnees.Log = Console.Out; var requete = (from unEmploye in maBaseDeDonnees.Employe where unEmploye.Role == 0 select unEmploye); foreach (var unEmploye in requete) { maBaseDeDonnees.Employe.DeleteOnSubmit(unEmploye); } maBaseDeDonnees.SubmitChanges();
VB
Dim maBaseDeDonnees As DotNetFrance = New DotNetFrance() maBaseDeDonnees.Log = Console.Out Dim requete = From unEmploye In maBaseDeDonnees.Employe Where unEmploye.Role = 0 Select unEmploye For Each unEmploye In requete maBaseDeDonnees.Employe.DeleteOnSubmit(unEmploye) Next maBaseDeDonnees.SubmitChanges()
14
3 Conclusion
Ce chapitre sur LINQ to SQL est maintenant termin. Nhsitez pas lire le chapitre LINQ to Objects afin de revoir tous les mots cls. Le LINQ to SQL permet dutiliser, avec le DataContext , une base de donnes avec le fonctionnement de la programmation objet. En effet, les tables de notre base de donnes sont transformes en objets utilisables, et peuvent tre par consquent manipuls en C#, langage orient objet. De plus, les requtes SQL associs vos modifications sont automatiquement faites par LINQ. Plus dinformations sur MSDN : http://msdn.microsoft.com/fr-fr/library/bb386976.aspx