begin process at 2008 05 17 16:09:08
1 174 123 membres
240 nouveaux aujourd'hui
13 974 membres club

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é: 14 728 / 2 283

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

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

  • 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

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS