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#] Lenteur requete sur Orcale


Sujet :

C#

  1. #1
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut [C#] Lenteur requete sur Orcale
    Salut à tous,

    je vous écrit car je commence en développement C#, je viens de créer une connexion Oracle, j'exécute une requête, et j'ajoute mes résultats dans un dataGridView.

    Ma requête renvoi un peu plus de 26000 lignes, cela n'est pas énorme, mais le problème c'est que ce traitement prend 1 minutes, une autre application développer dans un autre langage prend a peine 10 secondes.

    pour ma connexion j'utilise la référence suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using Oracle.DataAccess.Client;
    Code de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    OConnexion.ConnectionString = "Data Source=test;User Id=ad;Password=ad;";
            OConnexion.Open();
    Code de requête et son parcours :

    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
                string sQuery = "SELECT nom,prenom from client";
     
                // Instanciation de l'objet OracleCommand et de ses propriétés
                OracleCommand cmd = new OracleCommand(sQuery);
                cmd.Connection = OConnexion;
                cmd.CommandType = CommandType.Text;
     
                // On instancie notre OracleDataReader
                OracleDataReader reader = cmd.ExecuteReader();
     
                // Tant qu'il y a des résultats à lire, on les affiche
                string[] row= new string[2];
                while (reader.Read())
                {
                    // On affiche le nom et le numéro
                    row[0]=reader.GetString(0);
                    row[1]=reader.GetString(1);
                    tClient.Rows.Add(row);
                }
    Le code n'est pas très compliqué.

    Est ce que quelqu'un voit une solution à mon problème.

    Merci d'avance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Vérifie ce qui prend le plus de temps : récupérer les données ou remplir/afficher le gridview?

  3. #3
    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 : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    C'est normal que ce soit lent, tu traites les lignes une par une.
    Il faut utiliser un DataTable (voir un DataSet si plusieurs tables) avec l'objet OracleDataAdapter pour récupérer le tout en mémoire en un bloc. Ensuite, il te suffira de faire

    tongridview.DataSource = tondataset;
    Plus d'infos ici : http://dotnet.developpez.com/tutoriels/ado2/csharp/#L2

  4. #4
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    je viens de prendre part de vos réponse, je viens de regarder la piste que m'a donné Cardi.

    voila le code que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    string strRequete = "SELECT nom, prenom from client";
                // Instanciation de l'objet OracleCommand et de ses propriétés
                OracleDataAdapter oOracle = new OracleDataAdapter(strRequete,connection);
                DataSet oDataSet = new DataSet("Client");
     
                oOracle.Fill(oDataSet, "Client");
                DataView dvSample = oDataSet.Tables["Client"].DefaultView;
     
                tClient.DataSource = dvSample;
    J'ai du passer par un dataView, Est ce que c'est juste, est ce que je peux mettre directement dans mon datagridView, si oui comment faire faire car je n'ai pas réussi.

    merci d'avance

  5. #5
    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 : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Tu n'es pas obligé de passer par un DefaultView :

    tClient.DataSource = oDataSet.Tables["Client"];

  6. #6
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Super, cela fonctionne, merci des réponses.

    Je passe le message en [RESOLU].

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lenteur requetes sur tables, et surtout vues
    Par Samish dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/10/2010, 09h21
  2. Réponses: 4
    Dernier message: 04/02/2009, 19h09
  3. Réponses: 3
    Dernier message: 17/05/2004, 17h28
  4. requete sur un dossier
    Par vedder dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/03/2004, 14h05
  5. [MS-SQL]requete sur 3 tables
    Par pascalT dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 30/04/2003, 11h24

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