Travail sur les bases de données, les datasets et les fichiers xml

Soyez le premier à donner votre avis sur cette source.

Vue 22 395 fois - Téléchargée 3 054 fois

Description

On sait généralement utiliser Visual Studio pour créer une Application Frontale.
On charge les données à partir d'une base de données ou d'un fichier XML et on les remet après modification éventuelle dans leur conteneur. Mais savez vous charger un Dataset à partir d'un Fichier XML et mettre à jour une Table avec ?
C'est ce que propose, entre autre, cet article

Rappelons la technique pour créer une représentation sous la forme de DataGrid du contenu d'une table de Base de Données. :
On recherche la table dans l'explorateur de Serveur (Serveurs SQL/Le Serveur / la DB/ la Table) et on tire la table dans la WinForm, ce qui crée des objets SqlConnection et SqlDataAdapter
On crée ensuite un DataSet typé par le menu Données/Générer le groupe de données et on lui donne le nom de dsMaTable
Reste à déposer un DataGrid sur la WinForm et à paramétrer sa DataSource sur dsMaTable.MaTable

1) Affichage :
Un bouton nommé "Fill" servira à remplir le Dataset à partir de la table. Son code :
dsMaTable.Clear();
//sqlDataAdapter1.AcceptChangesDuringFill = false; //utilisé plus tard
sqlDataAdapter1.Fill(dsMaTable);

2) Modification:
Les modifications faites par l'intermédiaire de la grille peuvent être reportées dans la Table grâce à la méthode Update de l'Adapteur :
Un bouton nommé "UpdateMaTable" fera l'affaire avec le code suivant :
try{sqlDataAdapter1.Update(dsMaTable);}
catch (Exception ex) {MessageBox.Show("Exception : " + ex.Message);}

3) Créer du XML à partir du Dataset:
On peut aisément générer un fichier XML représentant les données de la grille
Un bouton nommé "WriteXML" portera le code suivant :
if (dsMaTable.Tables[0].Rows.Count>0) dsMaTable.WriteXml("MaTable.XML");
else MessageBox.Show("Dataset Vide");

4) Lire du XML dans un Dataset:
Pour l'opération inverse, on utilisera le bouton "LoadXML" suivant :
dsMaTable.Clear();
dsMaTable.ReadXml("MaTable.XML");

5) Mettre à jour une autre Table à partir d'un Dataset:
Maintenant, il reste à charger une Table2 à partir d'un Dataset. Le Dataset peut avoir été chargé à partir d'un fichier XML ou bien d'une autre Table ayant la même structure que la table à charger. On utilisera ce bouton "UpdateTable2" :
if (dsMaTable.Tables[0].Rows.Count==0)
{ MessageBox.Show("Dataset Vide"); return ; }
try { SqlDataAdapter da = new SqlDataAdapter ("Select * from MaTable2", sqlConnection1);
SqlCommandBuilder x = new SqlCommandBuilder (da); sqlConnection1.Open(); da.Update(dsMaTable, "LaTable"); }
finally { sqlConnection1.Close(); }

Remarque :
Attention ! pour pouvoir utiliser correctement la méthode Update de l'Adapteur, il faut absolument comprendre le fonctionnement du Fill et du ReadXML:
- lors d'un Fill : tous les enregistrements (des DataRows) ont un état mis à "Unchanged"
sauf si la ligne suivante est utilisée avant le Fill
sqlDataAdapter1.AcceptChangesDuringFill = false;
auquel cas les enregistrements sont dans l'état "Added"
- lors d'un ReadXML, les enregistrements sont automatiquement à "Added"
Enfin, lors de l'Update, seuls les enregistrements modifiés (Added, Deleted ou Updated) sont pris en compte.

Autre remarque:
La ligne suivante
SqlCommandBuilder x = new SqlCommandBuilder (da);
génère les 3 commandes UPDATE, DELETE et INSERT à partir des infos fournies par le SELECT
Ce sont ces commandes qui sont appelées respectivement lorsqu'un enregistrement du Dataset est trouvé dans l'état "Modified", "Deleted" et "Added"

Conclusion :


ajout d'un ZIP pour ceux qui préfèrent le tout fait.
Les lignes et remarques importantes sont dans la description

ajout d'un script de génération de DataBase + Tables de Test
ajout d'un scénario de démonstration

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_mac73
Messages postés
2
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
13 juin 2006
-
Bonjour
je suis débutant en c#
je viens de tester l'application en faisant quelques modifications (j'utilise odbc pour mysql).
le fait est que j'ai une erreur que je n'arrive pas à résolver.
IL remplit bien le dataset avec le bouton fill mais quand j'ajoute une entrée et que je clique sur updateActeurs j'ai une erreur qui dit:
Exception: erreur[23000][mysql][odbc 3.51 driver][mysqld-4.0.20a-debug-log]you have an error in your sql syntax. Check the manual that corresponds to your mysql server version for the right synthax near '; SELECT id, nom, prenom FROM Acteurs WHERE (id=@id)' at line 1.

La ligne en question est:

this.sqlInsertCommand1.CommandText "INSERT INTO Acteurs(id, nom, prenom) VALUES (@id, @nom, @prenom); SELECT * FROM Acteurs WHERE (id @id)";

je ne vois pas ou est l'erreur.
pourriez vous m'aider.
merci
Scaythe
Messages postés
11
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
4 juin 2010
-
Lire un fichier XML cela semble facile.
Quelle est la procedure à suivre pour lire le resultat d'une requete XML passer via IIS ?
Je m'explique :
J'ai le fichier schema/template suivant :
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="./FeuillesXSL/xslTaille.xsl"?>
<root xmlns:sql="urn:schemas-microsoft-com:xml-sql" >

<sql:query>
select 1 as TAG,
NULL as Parent,@@servername as [Server!1!Nom] for xml explicit
</sql:query>


<sql:query>
declare @space varchar(255)
create table #tailleDD ( drive char(1) , Libre int)
set @space='master.dbo.xp_fixeddrives'
insert into #tailleDD exec (@space)
select 1 as TAG,
NULL as Parent,
#tailleDD.drive as [Disque!1!Lecteur],
#tailleDD.Libre as [Disque!1!Espace]
from #tailleDD for XML explicit
</sql:query>

</root>

executer dans iis http://localhost/FichierSchema, j'obtiens :

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="./FeuillesXSL/xslTaille.xsl"?>
<root xmlns:sql="urn:schemas-microsoft-com:xml-sql">

<Server Nom="030709-236"/>

<tailleDB Base="CellTech" Taille="9Mo"/><tailleDB Base="Plum" Taille="9Mo"/><tailleDB Base="test" Taille="50Mo"/><tailleDB Base="Total" Taille="69Mo"/>

<Disque Lecteur="C" Espace="11816"/>

</root>


comment stocké l'information dans un dataset ??
Scaythe
cs_jacma
Messages postés
54
Date d'inscription
vendredi 31 octobre 2003
Statut
Membre
Dernière intervention
6 septembre 2005
-
Pour exécuter un script SQL comme décrit dans MSDN, il semble qu'il faille être dans un projet de base de données.
cs_jacma
Messages postés
54
Date d'inscription
vendredi 31 octobre 2003
Statut
Membre
Dernière intervention
6 septembre 2005
-
Bonjour
Je ne sais pas éxécuter le script SQL, malgré les recherches effectuées. L'aide MSDN indique:
"Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le script que vous souhaitez exécuter, puis sélectionnez Exécuter sur.". Mais je n'ai pas le menu contextuel indiqué.
Merci de votre aide.
PierrotVB
Messages postés
58
Date d'inscription
vendredi 12 juillet 2002
Statut
Membre
Dernière intervention
20 août 2004
-
oh, enfin quelqu'un qui devoile la puissance et la souplesse d'ADO.net :)

Mais je pense qu'il nous faudra a tous encore quelques mois pour trouver toutes les "combines", les subtilites et les facilites apportees par ADO.net

Bien joue

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.