Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TRAVAIL SUR LES BASES DE DONNÉES, LES DATASETS ET LES FICHIERS XML


Information sur la source

Catégorie :Base de données Source .NET ( DotNet ) Classé sous : xml, dataset Niveau : Débutant Date de création : 05/12/2003 Date de mise à jour : 05/12/2003 15:17:41 Vu / téléchargé: 17 475 / 2 535

Note :
7,22 / 10 - par 9 personnes
7,22 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

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


 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de gg00xiv le 05/12/2003 12:14:27

elle est ou la source ?

signaler à un administrateur
Commentaire de vieuxLion le 05/12/2003 15:27:17

la source a été rajoutée

cet article est ici suite à de nombreuses erreurs faites par la plupart,
- en particulier sur ce site - au sujet des Datasets et de leurs RowState.
Il montre que DB<=>DS<=>XML  reste simple (qques lignes) à condition de connaitre ce RowState.

signaler à un administrateur
Commentaire de tkrys le 12/12/2003 17:36:42

Merci pour cette explication fort intéressante !!! et trés instructif !
Si je peux me permettre : comment puis-je faire pour afficher les résultats de la requete, non dans une grille, mais dans de simples TextBox?
Merci d'avance

signaler à un administrateur
Commentaire de vieuxLion le 12/12/2003 18:53:34

c'est une excellente question ! merci pour ton intérêt

as tu essayé de placer un textbox, de le rendre multiligne et de code ceci ?

textBox1.Text = dsMaTable.GetXml();

signaler à un administrateur
Commentaire de tkrys le 12/12/2003 23:40:18

Essai effectué avec succés.

Je suppose qu'il ne me reste plus qu'a identifier les balises pour récupérer les données susceptibles de m'intéresser.
Je vais toutefois méditer sur ce point car je ne connais pas admirablement bien le XML (pour le moment en tout cas...)

Encore merci pour votre réponse... et le partage de votre culture!




signaler à un administrateur
Commentaire de PierrotVB le 14/12/2003 12:10:09

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

signaler à un administrateur
Commentaire de jacma le 11/02/2005 14:11:02

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.

signaler à un administrateur
Commentaire de jacma le 12/02/2005 11:27:44

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.

signaler à un administrateur
Commentaire de Scaythe le 05/04/2005 18:06:58

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

signaler à un administrateur
Commentaire de mac73 le 13/06/2006 17:27:14

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

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Gestion xml dans DataGrid [ par Januka ] Bonjour,je souhaiterais gérer un fichier xml au travers d'un datagrid.Je crée donc un Dataset, dans lequel je mets les infos du fichier xml, puis j'at Sauvegarde d'une base de donnees entiere dans un XML en c# [ par soutimo ] Bonjour,Je code en c# sur Visual Studio et j 'ai vu par le forum que la sauvegarde d'un dataset dans un fichier XML est possible.Ce dataset correspond tri xml par dataset [ par kulinicm ] salut,voila j'ai un fishier xml qui contient un ID un nom et un prenomle ficheir et tri&#233; par ID et moi je voudrai le trier par nom.je pens&#233; ReadXML terriblement lent !! [ par digital3d ] Je ne trouve pas de solution concernant une optimization de remplir un DataSet avec un XML, quand je fais NewDataSet.ReadXML(), mon fichier de 4MB XML Synchronisation d'un DataSet avec un XmlDataDocument [ par jimbz ] Chers 'pros' du C#.NET, j'ai besoin de vous. Personnellement je suis amateur et je viens de me lancer ds le C# qui offre (offrira quand je maitriserai Lire un XML avec DataSet.ReadXML() et performance [ par digital3d ] J'essaie de remplir un DataSet avec un XML qui fait 4 MB mais que c'est leeennnnntttt !!!! N'y a t-il pas un moyen de lire plus rapidement un fichier Dataset XML / IIS [ par Scaythe ] Bonjour,&nbsp;&nbsp;&nbsp;Pour tous les exmples qui concernent l'alimentation des datasets via xml, il est &#224; chaque fois question d'un fichier XM Comment écrire à la suite d'un fichier xml ? [ par m0rph3us002 ] Bonsoir !voil&#224; pour le moment j'arrive tr&#232;s bien &#224; rentrer des donn&#233;es dans un fichier xml grace &#224; : DataSet dataSet = new Da Recuperation d un contenu d une balise xml [ par peace50 ] bonjour je suis en train de parser du flux xml(rss) du type "http://blogs.developpeur.org/MainFeed.aspx" et je voudrais recupere le contenu de la bal DataSet vers XML avec un schéma imposé [ par Cydreav ] Bonjour, je voudrais savoir s'il est possible d'imposer le sch&#233;ma de la feuille xml g&#233;n&#233;r&#233;e par la fonction WriteXml() J'ai vu des


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,655 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.