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 :

probleme avec DataReader


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudient ingénieur système d'information mobile
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudient ingénieur système d'information mobile

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 58
    Points
    58
    Par défaut probleme avec DataReader
    salut tt le monde ,

    j ai essai de récupéré une valeur de la table du base de donnée et la mettre dans un autre table et j ai eu cette Erreur Un DataReader associé à cette Command est déjà ouvert. Il doit d'abord être fermé.
    voile le code
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    {
                int idfichier = 0;
                int rows = e.RowIndex;
                string urlfichier;
     
                urlfichier = this.dataGridViewdossier[1, rows].Value.ToString();
     
     
                tempsProcessus pp = new tempsProcessus();
                pp.PrintDoc(urlfichier);
                SqlCommand verif = new SqlCommand("SELECT id FROM dossier where nom ='" + urlfichier + "' ", con);
     
                    SqlDataReader r = verif.ExecuteReader();
                    while (r.Read())
                    {
                        idfichier = (int)r["id"];
                    }
     
                MessageBox.Show(idfichier.ToString());
                DateTime x = pp.getProcessStartTime();
                DateTime y = pp.getProcessEndTime();
                TimeSpan xy = x - y;
                SqlCommand sqlComm = new SqlCommand();
                sqlComm = con.CreateCommand();
     
                sqlComm.CommandText = @"INSERT INTO compture (dateouverture,datefermeture,tempstravail,id_personne,id_ficher) VALUES (@x,@y,@xy,@idpersonne,@idfichier)";
     
                sqlComm.Parameters.Add("@x", SqlDbType.DateTime);
                sqlComm.Parameters.Add("@y", SqlDbType.DateTime);
                sqlComm.Parameters.Add("@xy", SqlDbType.DateTime);
                sqlComm.Parameters.Add("@idpersonne", SqlDbType.Int);
                sqlComm.Parameters.Add("@idfichier", SqlDbType.Int);
     
                sqlComm.Parameters["@x"].Value = x;
                sqlComm.Parameters["@y"].Value = y;
                sqlComm.Parameters["@xy"].Value = xy;
                sqlComm.Parameters["@idpersonne"].Value = idpersonne;
                sqlComm.Parameters["@idfichier"].Value = idfichier;
     
     
                sqlComm.ExecuteNonQuery();
     
     
            }
    merci d avance

  2. #2
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    L'erreur se produit sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlComm.ExecuteNonQuery();
    ?

    Il faut savoir que dont Reader est conosmmé lorsqu'il est lu (méthode Read()) et donc, arrivé en bout de course, tu te trouves à la dernière ligne... et pas possible de le réutiliser.

    Par contre, je ne comprends pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (r.Read())
    {
        idfichier = (int)r["id"];
    }
    tu vas systématiquement utiliser le dernier retourné !
    Si ta requête ne retourne qu'une ligne, alors inutile de faire un while !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If(r.Read())
        idfichier = (int)r["id"];
    Ensuite tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlCommand verif = new SqlCommand("SELECT id FROM dossier where nom ='" + urlfichier + "' ", con);
    , c'est mal !
    Utilise ici aussi une requête paramétrée comme tu as fais en dessous.

    Enfin,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tempsProcessus pp = new tempsProcessus();
    Il est d'usage, en C#, de mettre une majuscule en Début de nom de classe.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudient ingénieur système d'information mobile
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudient ingénieur système d'information mobile

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 58
    Points
    58
    Par défaut
    merci de votre commentaire,
    alors je fait quoi dans ce cas la ???

  4. #4
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    quelle est la ligne à l'origine de l'erreur ?

    j'ai bien mon idée, mais le but est de t'aider à la trouver, pas de donner la réponse pour un problème si banal...

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par yassin123441 Voir le message
    salut tt le monde ,

    j ai essai de récupéré une valeur de la table du base de donnée et la mettre dans un autre table et j ai eu cette Erreur Un DataReader associé à cette Command est déjà ouvert. Il doit d'abord être fermé.
    C'est tout à fait normal, le reader travaillant en mode connecté, il y a un appel au serveur à chaque lecture. De ce fait la connexion ne peut pas être utilisée pour une autre commande en même temps.

    Plusieurs possibilités :

    - utiliser deux connexions : une pour lire, une pour écrire.

    - travailler en mode "déconnecté" : lire dans un DataTable puis écrire la transfo de données en vrac depuis les données du DataTable. (attention le mode déconnecté ici est relatif à la commande, pas besoin de fermer la connexion entre la lecture et l'écriture.

    - la troisième possibilité consiste à traiter dans une même requête la lecture et l'écriture.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudient ingénieur système d'information mobile
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudient ingénieur système d'information mobile

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 58
    Points
    58
    Par défaut
    voila ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sqlComm.ExecuteNonQuery();

  7. #7
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    C'est tout à fait normal, le reader travaillant en mode connecté, il y a un appel au serveur à chaque lecture. De ce fait la connexion ne peut pas être utilisée pour une autre commande en même temps.

    Plusieurs possibilités :

    - utiliser deux connexions : une pour lire, une pour écrire.

    - travailler en mode "déconnecté" : lire dans un DataTable puis écrire la transfo de données en vrac depuis les données du DataTable. (attention le mode déconnecté ici est relatif à la commande, pas besoin de fermer la connexion entre la lecture et l'écriture.

    - la troisième possibilité consiste à traiter dans une même requête la lecture et l'écriture.
    Je pensais à la première sollution, mais je voulais le laisser chercher un peu...

  8. #8
    Membre du Club
    Homme Profil pro
    Étudient ingénieur système d'information mobile
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudient ingénieur système d'information mobile

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 58
    Points
    58
    Par défaut
    j ai utilise deux connexion merci bcp

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Ne pas oublier le bouton alors.

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

Discussions similaires

  1. Probleme avec un Datareader
    Par Quorthon dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/02/2007, 14h02
  2. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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