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

C# Discussion :

[C#]Avis choix base de données poste-local


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 58
    Par défaut [C#]Avis choix base de données poste-local
    Bonjour,

    Je viens vers vous pour avoir votre avis concernent le choix d'une base de données.
    En fait je développe actuellement une application en C# avec des datagridview, des listView, treeview ....
    Je pose la question concernant la base de données, j'ai remarqué que le chargement des data (20 lignes ) depuis un table d'une base access n'est pas instantané, j'utilise le driver oledb sous win7.

    Avez-vous même comportement sous win 7 64 ?

    Puis je commence a regarder la possibilité de faire une base sous forme des fichiers txt, .dat file
    Que-pensez vous ?


    Merci d'avance pour l'aide .

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par TANITE Voir le message
    Puis je commence a regarder la possibilité de faire une base sous forme des fichiers txt, .dat file
    Que-pensez vous ?
    Libre à toi d'essayer, mais les résultats seront en plus désastreux ! Et ne parlons pas de la qualité (intégrité...) des données...


    Citation Envoyé par TANITE Voir le message
    Je pose la question concernant la base de données, j'ai remarqué que le chargement des data (20 lignes ) depuis un table d'une base access n'est pas instantané, j'utilise le driver oledb sous win7.
    Access n'est pas taillé pour des applications. C'un outil au même titre que Word ou Excel pour bidouiller dans son coin et se monter une petite moulinette sans trop d'effort et sans être développeur. En plus Access étant une base de données de type fichier, il souffre de nombreuses faiblesses.

    Le mieux c'est de s'orienter vers un vrai SGBDR digne de ce nom, et en prime gratuit contrairement à Access, il s'agit de SQL Server Express.

    Mais cela n'est pas non plus la solution miracle, encore faut-il savoir comment est-ce que tu as modélisé tes données. Une mauvaise modélisation donnera des performances désastreuses, quel que soit le SGBDR, le driver, etc. Et si tu as des problèmes de perfo avec Access sur une vingtaine de lignes, on peut très fortement soupconner un problème de ce côté...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Pour 20 lignes, si le chargement n'est pas instantané, alors le problème ne vient pas de la façon dont les données sont stockées (Access, XML, TXT, SQL Server ou ce qu'on veut) mais avant tout un problème dans la méthode pour les charger.

    En effet, je veux bien qu'Access soit pourri, mais il y a tout de même des limites.

    Pour 20 lignes, on ne fera pas mieux que Access en termes de légèreté, mise à part peut-être un SQL Lite (et encore, pas sûr).

    Que ça commence à merder avec quelques dizaines de milliers, et des jointures/filtres, OK. Mais un bête "select * from matable" qui contient 20 lignes, niet. Pas possible : si ça rame, c'est que vous avez oublié de nous indiquer des contraintes supplémentaires (base de donnés hébergée sur un serveur distant accessible via VPN en 2G, calculs mathématiques de cinglés sur les données chargées, données de type "blob" très volumineuses (images, documents) contenus dans ces 20 lignes, ou je ne sais quelle autre élément, du genre des boucles dans des boucles sur des événements qui déclenchent d'autres événements en mode "je fais n'importe quoi mais ça marche".

    J'imagine notamment des jointures "à la main, en C# plutôt qu'en SQL", comme on en voit trop souvent.

    Bref, donnez-nous plus d'informations sur :
    - le contenu de la base de données actuelle
    - les traitements que vous effectués lors de la restitution des lignes à l'écran
    - si possible un bout de code pour qu'on se rende compte de la manière dont vous chargez vos données dans les datagrid par exemple.

    Sinon, +1 avec la réponse précédente : SQL Server Express est une très bonne alternative à Access (on peut aussi avoir la version LocalDB, qui est plus légère). Mais à mon avis, votre problème de latence ne vient pas de là, et sera tout au mieux pire avec SQL Server (pour 20 lignes, aucune chance qu'un serveur qui bouffe 500 Mo de mémoire pour tourner puisse être plus performant qu'un drivers de quelques Ko, qui vont de toute façon bosser sur un fichier de données de même pas 1 Mo !

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 58
    Par défaut
    Salut,

    Merci pour vos réponses !

    Le code pas grand chose, c'est classique ....

    Lors de l'init d'un user control :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
     
            private void ucContacts_Load(object sender, EventArgs e)
            {
                try
                {
                    // Chargement de la liste des contacts depuis la base de données
                    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    SetTelData();
                }
                catch(Exception myException)
                {
                    MessageBox.Show(myException.Message,"Erreur",MessageBoxButtons.OK);
                }
     
            }
    La methode SetTelData
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            private void SetTelData()
            {
                DataSet ds = connclass.geDs("select ContactID,ContactFullName,GSMNumber,Description,Company,Address from ContactTable order by ContactID desc");
                dgvAllUser.DataSource = ds.Tables[0];
     
     
                // Mise a jour de la table pour pouvoir faire des recherche apres
                //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                ContactDataView.Table = ds.Tables[0];
            }

    et au final couche d'acces à la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
            public DataSet geDs(string strSql)
            {
                OleDbConnection conn = DataConn();
                OleDbDataAdapter oda = new OleDbDataAdapter(strSql, conn);
                DataSet ds = new DataSet();
                oda.Fill(ds);
                return ds;
            }
     
            public static OleDbConnection DataConn()
            {
                string strg = Application.StartupPath.ToString();
                strg = strg.Substring(0, strg.LastIndexOf("\\"));
                strg = strg.Substring(0, strg.LastIndexOf("\\"));
                strg += @"\DataBase";
                strg += @"\user_db.mdb";
                return new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strg);
            }
    Merci d'avance

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Le code est pas hyper propre, mais rien de particulier en effet.

    Dans la base, y'a quoi d'autre ? Quelle taille fait le fichier MDB ?

    D'autres actions en parallèle ?

    A quel moment on charge ce userControl ? C'est lent au premier chargement, ou tout le temps ?

    Car tout accès à une base de données met du temps la première fois (chargement du drivers, chargement du fichier de données, démarrage du moteur de requête, etc.)

    Mais là, clairement, ça devrait pas durer plus de quelques millisecondes pour charger les 20 lignes... (une fois le tout lancé, donc tester sur un rechargement du userControl).

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 58
    Par défaut
    La taille de la base est de 964Ko.
    Il y a d'autres tables, mais vide pour l'instant ....

    pas de taches en parallèle, et je charge le user control uniquement une seule fois .
    je vais tester le rechargement et vois si c'est mieux ...

    Merci

Discussions similaires

  1. [Conseil][BD]Choix base de données
    Par Baptiste Wicht dans le forum Général Java
    Réponses: 38
    Dernier message: 25/04/2006, 12h50
  2. ASP : question choix base de données
    Par Goldorak2 dans le forum ASP
    Réponses: 3
    Dernier message: 28/01/2006, 19h03
  3. Conseil sur choix base de donnée "individuelle"
    Par Rica dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 12/05/2005, 13h16
  4. Choix base de données site E-Commerce
    Par VincenzoR dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 10/03/2005, 13h40
  5. choix base de données
    Par alienor dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 08/11/2004, 23h58

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