IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Sauver un dataset dans un champ d'un table


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut Sauver un dataset dans un champ d'un table
    Bonjour a tous,

    Voici mon problème :
    Je créer un dataset a partir d'un fichier Excel et je souhaiterai le sauvegarder dans un champ d'une table SqlServer.
    Ma table est comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Table : SESSION
    Champ : ID (int), NAME (varchar), DATAS (Image)
    Comme vous l'aurez compris, le champ DATAS doit avoir mon dataset.

    Pour le moment j'ai fait ceci : (pour faire simple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim ms as new MemoryStream
    MonDataSet.WriteXml(ms)
    dim b() as bytes = ms.GetBuffer()
     
    ' je sauvegarde "b" dans mon champ DATAS
    Le problème est que dans mon fichier j'ai environ 40 000 lignes et que ma base de données passe de 113 Mo à 500Mo et que c'est très long...

    Pour info, adandonner l'idée de resauvegarder mon dataset dans un fichier Excel. Il faut que ca soit en base de données.
    Si quelqu'un a une idée
    "La Bretagne, ça vous gagne !!!"

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Pour améliorer la performance, on peut remplacer le format XML dont l'analyse peut être longue par un format maison (serialization du dataset à gérer à la mano via BinaryWriter et BinaryReader).
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut
    C'est a dire ?
    je parcours toute les lignes de mon datatable ?
    je sauvegarde dans quel format ?
    "La Bretagne, ça vous gagne !!!"

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    et bien faire autre chose que du xml dejà

    parce qu'imaginons que tu as 3 nombre qui sont en théorie rangeables dans 4 octets chacun (entre -2 milliards et 2 milliards)
    pour une ligne tu aurais donc 12 octets
    alors qu'en xml si je dis pas de conneries ca va écrire un truc du genre :

    <ligne>
    <nomcol1>
    264599457
    </nomcol1>
    <nomcol2>
    124594657
    </nomcol2>
    <nomcol3>
    2369494659
    </nomcol3>
    </ligne>

    à un octet le caractère on dépasse les 100 octets largement soit 10x plus qu'en enregistrant en binaire



    moi je te propose plutot de créer une table dans sql server, tu copies ton dataset dans cette table
    et tu enregistres le nom de la table créée dans ta table session

    c'est pas énorme à coder, c'est à mon avis ce qu'il y a de plus performant et tu peux réutiliser les données rapidement derrière
    car transformer du xml en données, ca prend plus de temps aussi vu qu'il faut lire beaucoup plus de choses
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut
    Je vais essayer de faire ca.
    - Création de la table.
    - Insertion des données dans cette table.
    Par contre existe t-il une methode rapide pour inserer les enregistrements ou dois je parcours toutes les lignes et toutes les cellulles ?
    "La Bretagne, ça vous gagne !!!"

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si c'est un dataset ptete qu'il y a un moyen de lui donner la table et en une instruction qu'il s'occupe de la synchronisation ... m'enfin je suis pas expert en dataset

    sinon ca risque de faire quelques lignes de code oui ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut
    C'est pas les lignes de code qui ne font peur mais c'est plutot au niveau perfomance. 40 000 lignes a parcourir et a sauvegarder, il ne faut pas etre pressé...
    Je regarde si je trouve la possibilité de faire une sauvegarde de masse et je reviens donner une solution (si j'en trouve une...)
    "La Bretagne, ça vous gagne !!!"

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si le dataset peut le faire tout seul, tu crois qu'il va faire quoi ? parcourir les lignes et faire un insert par ligne ...

    le plus performant à mon avis c'est de faire une seule execution des x requetes d'insert concaténées
    le problème c'est qu'en théorie il faut utiliser des parameters pour les types chiant (date, string au moins) et là sur une seule requete ca complique, donc peut etre faire un concat avec des replace


    d'ailleurs, si ton but est de lire des données dans excel pour les mettre dans sql server, je pense qu'il sait le faire tout seul, et manière très optimisée
    y a des assistants qui peuvent faire ca dans sql server studio management (pas express je crois), donc y a surement moyen de trouver la meme chose dans smo ... dts peut etre ... voir meme ssis
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Fichier dans un champ d'une table
    Par BOUBOU81 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 09/10/2006, 17h02
  2. [SQL Server] rechercher dans plusieurs champs d'une table
    Par houla! dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/08/2006, 09h37
  3. Réponses: 3
    Dernier message: 21/08/2006, 11h31
  4. Réponses: 4
    Dernier message: 08/07/2006, 06h36
  5. Lire un code à barre dans un champ d'une table
    Par tleboukaka dans le forum Débuter
    Réponses: 1
    Dernier message: 05/09/2005, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo