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

Développement Web avec .NET Discussion :

Plusieurs DataReader par DbConnection


Sujet :

Développement Web avec .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Par défaut Plusieurs DataReader par DbConnection
    Bonjour a tous,

    Afin de migrer mon application VB.NET d' ACCESS à SQL SERVER, j'ai utilisé les classes abstraites DbCommand que j'initialise soit en OleDbCommand ou SqlDbCommand à l'aide des Factory
    Je rencontre un problème de comportement quand je suis connecté à SQL SERVER comme s'il était impossible d'avoir plusieurs DbCommand en utilisation simultanée :
    Petit code pour montrer le problème:

    Code VB.NET : 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
            Dim Nocde As Integer
            Dim CNX As DbConnection
            Dim Cmd, Cmd2 As DbCommand
            Dim Rdr, Rdr2 As DbDataReader
            Dim Ville As String
     
            Try
                CNX = TexParam.BASE.Connection 'C'est ma DbConnection initialisée selon la base de donnée (Sqlserver ou OleDbConnection avec Access)
     
                Cmd = CNX.CreateCommand() 'Je cree une première DbCommand
                Cmd.CommandText = "SELECT numero FROM CDE_ENTETES WHERE RefCli='MAUFFREY'"
                Rdr = Cmd.ExecuteReader() 'Un premier DataReader - super ça marche
                Nocde = Rdr.GetInt32(0) 'Ok bonne lecture du 1er de mon DataReader
     
                Cmd2 = CNX.CreateCommand() 'Je cree une deuxieme DbCommand 
                Cmd2.CommandText = "SELECT ville_f FROM CDE_ENTETES WHERE Numero=" & Nocde.ToString
                Rdr2 = Cmd2.ExecuteReader() ' et hop PLANTAGE !!! à la première execution --> Un DataReader associé à cette Command est déjà ouvert. Il doit d'abord être fermé.
                Ville = Rdr.GetString(0)
                Rdr2.Close() : Rdr2 = Nothing
                Cmd2.Dispose() : Cmd2 = Nothing
     
                Rdr.Close() : Rdr = Nothing
                Cmd.Dispose() : Cmd = Nothing
     
            Catch ex As Exception

    Avez vous une idée? une piste à exploiter car je suis vraiment bloqué.
    Merci d'avance

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    ExecuteReader retourne un reader
    il faut fermer ce reader avant de pouvoir faire un autre ExecuteReader
    donc ajoute Rdr.Close après Nocde = Rdr.GetInt32(0)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Par défaut
    Désolé pour cette demande, j'avais pourtant fouillé partout sur le net...

    J'ai trouvé : Il ne faut pas oublier la chaîne ";MultipleActiveResultSets=True" dans la chaîne de connexion à SQL SERVER pour avoir plusieurs DbDataReader en accès simultanés
    Bonne soirée à tous

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    ca doit être une solution aussi (que je ne connaissais pas)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  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
    Citation Envoyé par Pol63 Voir le message
    ca doit être une solution aussi (que je ne connaissais pas)
    Cette solution s'appelle "MARS" en effet.
    Problème classique qu'on tous les développeurs qui ont fait des sites en ASP ou du VB6, car à l'époque (SQL Server 6.5, 7.0 et 2000) avec ces logiciels il était possible d'ouvrir plusieurs RecordSet (équivalent au DataReader) en même temps.
    Et ça a disparu avec DataReader... Ça n'est supporté de nouveau sous forme de MARS que depuis SQL Server 2008.

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

Discussions similaires

  1. Remplir simultanément plusieurs combobox par datareader
    Par Machine Head dans le forum VB.NET
    Réponses: 1
    Dernier message: 16/07/2010, 11h52
  2. Réponses: 8
    Dernier message: 30/05/2005, 13h55
  3. [DirectPlay] plusieurs clients par IP..
    Par k'n1 dans le forum DirectX
    Réponses: 4
    Dernier message: 21/02/2005, 02h26
  4. Réponses: 4
    Dernier message: 02/09/2004, 21h43
  5. Remplacer plusieurs colonnes par un 'alias'
    Par zestrellita dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/04/2004, 16h51

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