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

Dotnet Discussion :

Dataset or not ?


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 259
    Par défaut Dataset or not ?
    Bonjour, j'ai cru comprendre que les dataset n'étaient pas recommandés pour des questions de performances ? Qu'il vallait mieux utiliser un datareader , est ce vrai ? je dois réaliser une appli avec une base SQL server, j'avais plus l'habitude de travailler avec des datasets mais là je vais avoir besoin de bonne performances...
    Y a t'il des tutaux avec les datareaders ?

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Ca dépend de l'utilisation que tu désires en faire.

    Le dataset te donne la possibilité d'avoir une copie de tes données (provenant de la db) en mémoire. Le but étant de pouvoir faire un traitement sur ces données en mode déconnecté : exemple lier ce dataset à un DataGridView où l'utilisateur va pouvoir consulter, éditer, supprimer et insérer les données.

    Toutes ces modifications se trouveront en mémoire dans ton dataset et quand tu décideras de valider ces modifications, tu pourras reporter ces modifications en base de données.

    Le but d'un dataset, c'est de travailler en mode déconnecté :
    • Connexion à la base de données
    • Copie des données qui nous intéressent
    • Fermeture de la connexion à la base de données
    • Travail sur les données en mémoire
    • Et éventuellement se reconnecter à la base de données pour répercuter les changements

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 259
    Par défaut
    il est donc pas recommandé de travailler avec autre chose que du dataset avec un datagridview ?

  4. #4
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Avec C# 2.0 et pour le cas que je viens de citer, je dirais qu'il est juste préférable d'utiliser un dataset.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    cela va dépendre aussi du contexte d'utilisation...

    il faut voir l'aspet volumétrie de données, retournée dans le résultat SQL.
    Comme indiqué précédemment, DataSet fait une copie COMPLETE du résultat en mémoire, et libere la ressource (en l'ocurrence un datareader).
    Dans le cas d'un dataset il faudra donc accepter que la charge mémoire de ton application grossisse a vue d'oeil pendant l'utilisation du dataset...

    si l'applicatif developpé est clairement un serveur, la mémoire devient un point assez épineux et sensible, et il est préférable (pour de grosses volumétries du moins) de travailler avec les datareader.
    si l'applicatif est client de la DB uniquement et s'exécute sur une workstation et n'a pas vocation a être serveur, le fait d'utiliser les DataSet ne pose aucun problème, même en terme de volumétrie.

    ensuite il y a l'aspect accès aux données, et mode de connexion. Un dataset est déconnecté, c'est le reflet de la base, en mémoire, les données sont là, tu peux les retourner dans tous les sens, les lires plusieurs fois de suite, les passer dans plusieurs process en meme temps ou l'un après l'autre sans rien risqué (pour la lecture).
    Si en revanche tu utilise un datareader, tu es en mode connecté et tu fait une lecture des enregistrements incrémentale, tu lis enregistrement par enregistrement, mais tu ne conserve pas en mémoire le précédent, et tu ne peux pas revenir à l'enregistrement précédent dans le resultset... en contrepartie celle solution nécessite beaucoup moins de mémoire mais monopolise la ressource plus longtemps et possède des inconvénients notoires, comme le fait de ne pas pouvoir relire les données après coup, le traitement doit donc être fait en 1 passe, si tu envoie les données à deux threads... comment vont'il lire l'enregistrement suivant, il faudra les synchroniser, et le plus lent des threads à faire le traitement va paralyser les autres...

  6. #6
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 185
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 185
    Par défaut
    Bonjour.

    Citation Envoyé par Yogy Voir le message
    il est donc pas recommandé de travailler avec autre chose que du dataset avec un datagridview ?
    Ca dépend du nombre de ligne que tu récupéres et si ton DGV est "readonly" ou pas.

    Si c'est un liste simple sans MAJ possible, je conseillerai le Datareader dont tu charge le résultat en Datatable qui sera la source du DGV --> beaucoup plus rapide qu'un dataadapter.fill sur un dataset car plus basique.

    Si tu as des MAJ à faire sur le DGV, il te faut mieux passer par un Dataset.

    Mais si ton dataset ou ton datareader récupére beaucoup de lignes, c'est l'alimentation du DGV qui devient pénalisante et tu devras passer par le VirtualMode.
    (soit dit en passant, la récupération d'un nombre trés important de lignes dans un DGV en MAJ n'est de toute façon pas trés conviviale pour l'utilisateur --> un pré-filtre de sélection limitera tout ça).

    Cdt.

Discussions similaires

  1. le message erreur 'dataset not in edit or insert mode'
    Par fcboumi13 dans le forum Bases de données
    Réponses: 8
    Dernier message: 05/11/2009, 00h08
  2. TXMLModule.create - name = resource not found
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 04/03/2003, 11h54
  3. [Turbo C++] Fonciton containing for are not expanded inline
    Par BuG dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 17/02/2003, 07h48
  4. Component not found
    Par Pm dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 15h40
  5. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 01h07

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