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

ASP Discussion :

Erreur de connection à la base de données


Sujet :

ASP

  1. #1
    Membre confirmé Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Points : 616
    Points
    616
    Par défaut Erreur de connection à la base de données
    Bonjour à tous,

    Voilà mon deenier souci.

    Lors ce que je lance une page asp en vbscript j'ai au bout d'un certain nombre d'enregistrement de la requete passé cette erreur la qui apparait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Microsoft OLE DB Provider for SQL Server erreur '80004005' 
     
    [DBNETLIB][ConnectionOpen (Connect()).]Ce serveur SQL n'existe pas ou son accès est refusé.
    La ligne qui est concerné est un ligne qui execute une requete .

    Le souci que j'ai et que je n'arrive pas a résoudre vinet du fait que ctte requete est dans une boucle et qu'elle s'est donc déjà exécutée une bonne 50aine de fois.

    pour faire un peu plus clair voici un peu ma page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    '1ere requete de selection'
    do while not 'la fin de ma requete 1'
       fait plusieurs test et autres requetes
       ...
       monobjet.execute(requete) ' ligne qui plante au bout du Xieme passage.
     
      . movenext
    loop
    Vous voyez de quoi cela peut venir?

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Salut,

    Il faudrait plus de code pour etre certain mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    do while not 'la fin de ma requete 1'
       fait plusieurs test et autres requetes
       ...
       monobjet.execute(requete) ' ligne qui plante au bout du Xieme passage.
     
      .movenext
    loop
    Normalement il faut utiliser le recordset pour faire le movenext
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      recordset.movenext
    loop
    Mais bon, cela devrait plutôt générer un time out. Peux-tu nous en montrer plus?
    A+

  3. #3
    Membre confirmé Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Points : 616
    Points
    616
    Par défaut
    je peux mais si tu veux j'ai fais cela de tête car je n'avais plus accès au code.

    donc en voilà un peu plus.

    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
    SQLQuery = "SELECT * FROM Commande WHERE  id_etat = 10 order by id_commande"
    Set RScommande = objconnexion.Execute(SQLQuery)
    Do While Not RScommande.EOF
       requete = "select * from liste_article where id_commande = "& rscommande("id_commande")
    	set rsarticle = objconnexion.execute(requete)
    	do while not rsarticle.eof
                 ' on  met a jour la liste des articles
    	 ' on fait sonc un insert ou un update sur une table
    	 rsarticle.movenext
    	loop
    	rsarticle.close
    	set rsarticle = nothing
     
    	RScommande.MoveNext
    Loop
     
    RScommande.Close
    Set RScommande = Nothing
     
    objconnexion.Close
    Set objconnexion = Nothing

  4. #4
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Bonjour

    Peut-etre un probleme du a un trop grand nombre de requetes simultanées sur ton serveur (encore qu'avec SQL server, je m'avance peut-être un peu )

    As-tu essayé d'inclure tout ça dans une transaction ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ' au début : 
    objconnexion.beginTrans()
     
    ...... (tout ton traitement)......
     
    ' A la fin : 
    objconnexion.commitTrans()
    Le serveur de BdD reçoit toutes les requetes sans les interpréter, puis commence à les traiter des qu'il a reçu le commitTrans()

  5. #5
    Membre confirmé Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Points : 616
    Points
    616
    Par défaut
    J'ai une belle erreur lorsque je fais ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Microsoft OLE DB Provider for SQL Server erreur '80004005' 
     
    Impossible de créer une nouvelle connexion en mode de transaction manuelle ou distribuée.
    elle intervient lorsque je fais un select dans la boucle.

  6. #6
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Après reflexion, ma remarque n'avait pas beaucoup de sens ....

    habituellement, dans ces cas là, je traite une seule requete et gère mes ruptures par programmation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from Commande inner join liste_article on Commande.id_commande=liste_article.id_commande order by Commande.id_commande
    Une seule requete, une seule boucle . Juste quelques tests pour gérer les ruptures. Le SGBD y gagne, le programmeur aussi, le patron est content .

    Les tests de rupture amènent un peu de programmation en plus, mais ça compense largement les multiples instanciations/deletions que tu fais avec set ...

  7. #7
    Membre confirmé Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Points : 616
    Points
    616
    Par défaut
    Je vais en effet essayer de faire tout ça en une boucle et on verra.
    Au pire cela ne fera rien mais cela ne devrait pas empirer...

  8. #8
    Membre confirmé Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Points : 616
    Points
    616
    Par défaut
    Malheureusement je n'ai pas plus de résultat avec une seule requete de sélection.

    Mais bon je persiste.

    Edit :

    Ce qui me gene déjà c'est que cela ne le fait pas toujours au même enregistrement de la requete.
    Du coup je ne sais pas d'ou cela vient.


    Edit 2 :

    Est ce que cela peut venir d'une surcharge du serveur?
    J'y crois pas trop vu la taille du serveur....
    Peut être une surcharge niveau file d'attente des requètes?

  9. #9
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Salut,

    Ouais, sauf que deux boucles imbriquées cela peut faire bcp de tours...
    Tu pourrais d'ailleurs essayer de les compter.

    Je suis un peu étonné que tu fasses un "SELECT * FROM..." alors qu'un "SELECT id_commande FROM..." devrait alléger le recordeset. Idem pour "select * from liste_article..." j'imagine.

    Sinon, tu pourrais essayer d'en faire une procédure stockée. Il ne me semble pas utile de faire intervenir IIS sur ce morceau de code SQL.

    Une autre solution est de travailler en mode déconnecté. Tu peux essayer en faisant un "recordset.GetRows()".

    Mais je serais curieux de savoir combien d'enregistrements tu retournes au total.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim cnt
    Set RScommande = objconnexion.Execute("SELECT COUNT(*) FROM Commande WHERE  id_etat = 10 order by id_commande")
    cnt = RScommande(0)
    Do While Not RScommande.EOF
    	Set rsarticle = objconnexion.execute("select COUNT(*) from liste_article where id_commande = " & rscommande"id_commande"))
    		cnt = cnt + rsarticle(0)
    		rsarticle.close
    	Set rsarticle = nothing
    	RScommande.MoveNext
    Loop
    Response.Write cnt
    A+

  10. #10
    Membre confirmé Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Points : 616
    Points
    616
    Par défaut
    Pour info on tourne à 1500 enregistrements.

    Je ne trouve pas cela énorme.

    J'ai modifié aussi pour le "select *".
    et du coup je n'ai plus qu'un seul select puisque hier j'ai imbriqué les deux select.

  11. #11
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Citation Envoyé par Phiss Voir le message
    et du coup je n'ai plus qu'un seul select puisque hier j'ai imbriqué les deux select.
    C'est-à-dire? Ca marche?

    A+

  12. #12
    Membre confirmé Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Points : 616
    Points
    616
    Par défaut
    Depuis deux jours cela a l'air de passer.
    Je cloture duc oup et je réouvre si cela plante à nouveau.

  13. #13
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Grâce à quels changements?

  14. #14
    Membre confirmé Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Points : 616
    Points
    616
    Par défaut
    Salut,

    Je pensais avoir résolu avec le fait d'avoir réduit le nombre de requetes executées sur ma page.

    Mais la ce matin je me retrouve avec les mêmes erreurs de scripts alors que je n'ai plus que le minimum dans ma requete.
    je ne vais chercher que les champs dont j'ai besoin après, j'ai regroupé mes deux requetes de selection en une seule.

    Et pour infos j'ai aujourd'hui 1500 enregistrements.
    Un peu comme avant quoi...

    donc je reprends:
    J'ai une requete de selection qui me retourne 1500 enregitrements.

    Avec ces enregistrements, je teste la valeur d'un des champs, si il n'est pas correct, j'execute uen autre reuqte de sleection poura ller chercher un autre renseignement ( je vais essayer de la mettre dans le premire requte)
    sinon apres je ne fais que traité les 1500 enregistrements que je stocke dans une autre table.
    Le suel truc qui peut me bloquer ensuite c'est que les résultat que j'ai par rapport a un enregistrement je dois regarder si je ne les ai pas traité avant.

    Je m'explique.
    Pour l'enregistrment X j'ai un article Y. je test si j'ai pas déjà rencontré l'article Y sur mes enregistrment d'avant.
    Si j'ai je fais un update de ma table de résultat sinon j'insère.

    Vous avez suivit?
    Je peux peut être faire plus clair si vous me demandé. ;-)

    Merci de votre aide en tout cas.

  15. #15
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Bonjour

    Vous avez suivit?
    Je peux peut être faire plus clair si vous me demandé. ;-)
    Oui, tu peux poster le code (complet !) de ta page ainsi que le message d'erreur exact. Ca aidera a t'aider

  16. #16
    Membre confirmé Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Points : 616
    Points
    616
    Par défaut
    Alors je reviens avec de bon résultats.
    J'ai réussi a enlever encore une requete et du coup cela passe.
    A suivre mais bon pour le moment cela passe.

    Donc plus de message d'erreur Roro désolé. ;-)

    Merci quand même.

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

Discussions similaires

  1. Erreur pour se connecter à la base de donnée
    Par cobra2930 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 11/04/2011, 10h19
  2. Erreur lors de se connecter à la base de données SQL Server
    Par rabab_Master23 dans le forum Administration
    Réponses: 1
    Dernier message: 21/11/2008, 10h51
  3. Erreur lors de se connecter à la base de données SQL Server
    Par rabab_Master23 dans le forum Autres outils décisionnels
    Réponses: 0
    Dernier message: 04/11/2008, 16h22
  4. Erreur lors de se connecter à la base de données SQL Server
    Par rabab_Master23 dans le forum Pentaho
    Réponses: 1
    Dernier message: 04/11/2008, 16h00
  5. Erreur sur une connection de base de donnée
    Par Masmeta dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/03/2008, 13h44

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