Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Code n' Cook.net

Lorsque la marmite bout, l'amitié fleurit

Actualités

  • Résolution 2008 : Blogguer
Comment clôner un DataSet ? (MAJ) et limite du compact Framework !

Suite à qq remarques concernant ma fonction j'ai pu tirer plusieurs enseignements :

  • Tourne ta langue 7 fois dans ta bouche avant de blogger :)
  • Il y a deux types de personnes (au moins) : ceux qui ricanent et ceux qui t'expliquent (merci à ces derniers.)

Alors que celui qui n'a jamais "merd.." me lance la première pierre.

Pour ce qui est de la technique :  

Effectivement, il existe une fonction Dataset.Copy qui fait exactement ce que j'ai écrit, et en une ligne..

Ce qui me rassure c'est qu'ILDASM sur System.Data montre que la logique que j'ai utilisée est la même :)

 IL_0001:  callvirt   instance class System.Data.DataSet System.Data.DataSet::Clone()

  IL_0016:  call       instance class System.Data.DataTableCollection System.Data.DataSet::get_Tables()

    IL_0044:  callvirt   instance class System.Data.DataRowCollection System.Data.DataTable::get_Rows()

      IL_0064:  callvirt   instance void System.Data.DataTable::CopyRow(class System.Data.DataTable,

     IL_006b:  callvirt   instance bool [mscorlib]System.Collections.IEnumerator::MoveNext()

En revanche ils n'utilisent que 2 boucles au lieu de 3 car la fonction CopyRow doit boucler sur les colonnes.

Je garderai cependant à l'esprit la méthode DataSet.Tables("Matable").ImportRow, merci à Nix

Et c'est la que je rebondit (Abracadabra, tour de passe-passe, tagadaboumboum c'est moi) :

Je suis au regret de vous annoncer que dans le CompactFramework, la méthode DataSet.Copy n'existe pas (nananère) et c'est ILDASM qui le dit ! (ya bien clône mais pas copy)

Donc je reposte ma super fonction ; )

Public Function CloneADataset(ByVal DSSource As DataSet) As DataSet

Dim oDS As New DataSet

Dim oDT As DataTable

Dim oDR As DataRow

Dim oDC As DataColumn

Dim oRowDest As DataRow

'Clonage de la structure du Dataset

oDS = DSSource.Clone

'Les boucles

For Each oDT In DSSource.Tables

For Each oDR In oDT.Rows

oRowDest = oDS.Tables(oDT.TableName).NewRow()

For Each oDC In oDT.Columns

oRowDest(oDC.ColumnName) = oDR(oDC.ColumnName)

Next

oDS.Tables(oDT.TableName).Rows.Add(oRowDest)

Next

Next

Return oDS

End Function

(Purée, je m'en sors bien sur ce coup là, espérons qu'il n'y ai pas d'autre méthode ;) sinon faites moi savoir et bâchez moi !!!)

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: jeudi 3 juin 2004 15:33 par highjack

Commentaires

highjack a dit :

Ouah! y a faute là m'sieur l'arbitre. T'avais pas dit que c'était sur CompactFramework, c'est de la triche ça.

Nix ou Renaud, s'il vous plaît, vous me tenez Jack pendant que je le rase pour avoir couché avec son PocketPC ;-)
# juin 3, 2004 16:25

highjack a dit :

M'en veux pas Shrek.. avoues quand même que c'est une belle pirouette ;)
J'te ferai la recette de la purée au camembert fermier pour la peine va !!!
# juin 3, 2004 17:06

highjack a dit :

C'est pas du clonage, cest de la copy encore ...
on clone la structure, on copie avec les données ...

Mais bon, c'est vrai que sinon, la fonction copy n'est pas implémenté (pour ceux qui savent lire la MSDN ;)), et que souvent la meilleur chose a faire, cest un coup de reflector sur les assembly de MS, pour voir comment il a été implémenté par eux :D

+1 pour le rattrapage
-3 pour l'inaxectitude de la question ;)
# juin 3, 2004 21:27

highjack a dit :

Et si je te clone j'ai tout ou seulement les os ? :)
Effectivement Clone est un abus de language, certes mais chacun nomme ses fonctions comme il veut !!! vive le .Net libre ! ;)
J'essayerai dans l'avenir de ne plus induire mes chers lecteurs en erreur !
merci pour la remarque.
# juin 3, 2004 22:12
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- ssdl view et TPT par Matthieu MEZIL le 07-05-2008, 02:04

- L'injection SQL n'est PAS un problème QUE pour les développeurs web ! par CoqBlog le 07-05-2008, 01:08

- Un outil pour réaliser des animations WPF basées sur des équations de Bézier par Perspective le 07-04-2008, 21:45

- Sandcastle et CodePlex : le verdict par CoqBlog le 07-04-2008, 20:53

- ssdl view et TPH par Matthieu MEZIL le 07-04-2008, 19:12

- Webcasts sur le Parallel Framework disponibles par Matthieu MEZIL le 07-04-2008, 17:26

- [Silverlight] - Comprendre et Débuter avec Silverlight par Danuz le 07-04-2008, 12:41

- SharePoint : Nouvel article sur l'exportation et Importation de sites SharePoint par Blog Technique de Romelard Fabrice le 07-04-2008, 01:00

- ImagineCup 2008 Final in Paris: Day 1 par Richard Clark le 07-03-2008, 22:48

- PowerShell : Comment utiliser un ENUM .NET dans un script PowerShell par Blog Technique de Romelard Fabrice le 07-03-2008, 18:09