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.NET Discussion :

[C#][2.0] Pb BdD Access 2000


Sujet :

ASP.NET

  1. #1
    Membre éclairé Avatar de quanou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 311
    Par défaut [C#][2.0] Pb BdD Access 2000
    Bonjour,
    Ma config :
    Aspnet 2.0
    SqlServer 2005 Express Edition
    Access 2000
    Windows XP Pro

    J'ai le code erreur (ErrorCode=-2147467259) avec cela comme trace :

    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
    System.Data.OleDb.OleDbException was unhandled by user code
      Message="Erreur non spécifiée"
      Source="Microsoft JET Database Engine"
      ErrorCode=-2147467259
      StackTrace:
           at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
           at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
           at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
           at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
           at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
           at System.Data.OleDb.OleDbConnection.Open()
           at UserDB.GetUserInfoFromEmail(String EmailAddr) in c:\Inetpub\wwwroot\siteifct\App_Code\UserDB.cs:line 32
           at Default_aspx.Page_Load(Object sender, EventArgs e) in c:\Inetpub\wwwroot\siteifct\Default.aspx.cs:line 60
           at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
           at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
           at System.Web.UI.Control.OnLoad(EventArgs e)
           at System.Web.UI.Control.LoadRecursive()
           at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
    Ca fait référence à la notion de pool. Ce qui veut dire que cette notion est également applicable à Access ?
    L'erreur survient quand je m'authentifie à l'application (en débug) et ferme l'appli comme un bourrin (sans "déconnexion"), et ce après plusieurs fois de suite.
    Pourtant, toutes mes connexions sont (apparemment) bien fermées dans le code.
    Ca marche bien la plupart du temps...

    Merci beaucoup pour votre aide.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Bonjour

    C'est de l'ASPX donc ce n'est pas dans le bon forum => je déplace

    La prochaine fois, merci de prendre garde où vous postez.

    A+

  3. #3
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Il serait interressant que tu nous donnes les lignes de codes incriminées par cette exception

  4. #4
    Membre éclairé Avatar de quanou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 311
    Par défaut
    Citation Envoyé par neguib
    Il serait interressant que tu nous donnes les lignes de codes incriminées par cette exception
    Bonjour,

    Ca plante à l'ouverture de la connexion (OleDbConnection1.Open()) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        public OleDbDataReader GetUserInfoFromEmail(string EmailAddr)
        {
            string connString = System.Configuration.ConfigurationManager.ConnectionStrings["GeneralConnectionString"].ConnectionString;
            OleDbConnection OleDbConnection1 = new OleDbConnection(connString);
            OleDbConnection1.Open();
            System.Data.OleDb.OleDbCommand oleDBCmd = OleDbConnection1.CreateCommand();
            oleDBCmd.CommandText = "SELECT IDinPersonne, IIf(IsNull(RefParamC_Titre.Libelle),'',RefParamC_Titre.Libelle) AS Titre, IIf(IsNull(RefParamC_Civilite.Libelle),'',RefParamC_Civilite.Libelle) AS Civilite, TeAnnuaire.txNom, IIf(IsNull(TeAnnuaire.txPrenom),'',TeAnnuaire.txPrenom) As Prenom FROM RefParamC_Titre RIGHT JOIN (TeAnnuaire LEFT JOIN RefParamC_Civilite ON TeAnnuaire.ocCivilite = RefParamC_Civilite.Code) ON RefParamC_Titre.Code = TeAnnuaire.ocTitre WHERE TeAnnuaire.txEmail1 = '" 
                + EmailAddr.ToString() + "'";
            // Create the SqlDataReader object and return it
            System.Data.OleDb.OleDbDataReader dr = oleDBCmd.ExecuteReader(CommandBehavior.CloseConnection);
            // Return the datareader
            return dr;
     
        }
    Comme je le disais, ça n'arrive que de temps en temps, et se rétablit tout seul au bout d'un moment, sans que j'ai besoin de faire quoi que ce soit.
    J'ai du mal à reproduire l'anomalie, mais il semblerait que ça arrive quand je teste l'appli en mode debug, après plusieurs authentification/arrêt debug successifs.

    Merci pour votre aide.

  5. #5
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Voilà un petit conseil de codage des blocks de connection
    • 1. Declarer le variables et les mettre à null si besoin
      2. try
      [list:8f486b171a]- instanciations et initialisation
      - ouverture
      - procedure à executer

    3. catch : gerer l'affichage du message d'erreur de l'exception qui sera par la même occasion plus explicite
    4. finally : s'assurer que la connection n'est ni null, ni Closed et dans ce cas executer la fermeture[/list:u:8f486b171a]
    Ceci permettra déjà d'y voir plus clair sur ce souci s'il persiste

  6. #6
    Membre éclairé Avatar de quanou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 311
    Par défaut
    Merci Neguib pour ces conseils.
    En effet, on a tendance à négliger cela, en général par flemme (comme moi)

    Mon code modifié :
    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
        public OleDbDataReader GetUserInfoFromEmail(string EmailAddr)
        {
            string connString = System.Configuration.ConfigurationManager.ConnectionStrings["IFCT-GeneralConnectionString"].ConnectionString;
            OleDbConnection OleDbConnection1 = new OleDbConnection(connString);
            System.Data.OleDb.OleDbDataReader dr = null;
            try
            {
                OleDbConnection1.Open();
     
                System.Data.OleDb.OleDbCommand oleDBCmd = OleDbConnection1.CreateCommand();
                oleDBCmd.CommandText = "...";
     
                // Create the SqlDataReader object and return it
                dr = oleDBCmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
     
            catch (OleDbException ex)
            {
                GlobalTools.DisplayError displayErr = new GlobalTools.DisplayError();
                displayErr.DisplayOleDbErrorCollection(ex);
            }
            // Return the datareader
            return dr;
     
        }
    Je vous épargne la requête mais elle est correcte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                for (int i = 0; i < exception.Errors.Count; i++)
                {
                    string errMsg = "Index #" + i + "\n" +
                           "Message: " + exception.Errors[i].Message + "\n" +
                           "Native: " + exception.Errors[i].NativeError.ToString() + "\n" +
                           "Source: " + exception.Errors[i].Source + "\n" +
                           "SQL: " + exception.Errors[i].SQLState + "\n";
                }
    Et voici le peu d'information que j'ai concernant l'erreur (récurrente mais non systématique) ! :

    Avec errMsg :
    Index #0
    Message: Erreur non spécifiée
    Native: 0
    Source: Microsoft JET Database Engine
    SQL:
    Et en y mettant un watch dessus :
    ErrorCode : -2147467259
    _COMPlusExceptionCode : -532459699
    Voilà, je suis un peu perdu.
    Est-ce du à mon code ?
    Est-que Access est suffisamment fiable pour une application Web ? Dans mon cas, c'était tellement pratique de m'appuyer sur la base Access car elle est déjà alimentée (et continue à l'être par mes collègues).

    Merci pour votre aide, et bon we

  7. #7
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Mhmm pas net ce souci
    Cela semble bien être provoqué par le service de ta BDD, en attendant que je te trouve une réponse plus claire, gère dans le catch une fermeture de la connection si elle n'est pas fermée puis retente une connection

  8. #8
    Membre éclairé Avatar de quanou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 311
    Par défaut
    Citation Envoyé par neguib
    Mhmm pas net ce souci
    Cela semble bien être provoqué par le service de ta BDD, en attendant que je te trouve une réponse plus claire, gère dans le catch une fermeture de la connection si elle n'est pas fermée puis retente une connection
    Ok, c'est sympa de t'être penché sur mon cas.
    Pour info, j'accède en "manuel" au fichier mdb sans problème.

    Beaucoup plus intéressant : j'ai eu l'idée de me m'authentifier sur le site (donc appel à GetUserInfoFromEmail) avec le meme login/mdp 10 fois de suite, et (avec ou sans déconnexion) ça plante à la 11e fois !!!
    Et là, j'ai dû recycler le aspnet_wp process pour pouvoir accéder à nouveau aux fonctionnalités du site (en l'occurence l'authentification, gloups).

  9. #9
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    ok donc mon astuce devrait en attendant t'aider: le catch empêche le plantage sur la 11 ième puis tente la 12ième à la place

  10. #10
    Membre éclairé Avatar de quanou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 311
    Par défaut
    Salut Neguib,
    heu...tu vas me tuer
    Bon, j'ai cherché depuis ce matin et c'était de ma faute :

    J'ai fait ça pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                int titi = 0;
                int j = 0;
                while (titi == 0)
                {
                    try
                    {
                           myReader = userInfo.GetUserInfoFromEmail(strNomUtilisateur);
                        j++;
                    }
                    catch
                    {
                        titi = j;
                    }
                }
    Et la ça plante pour j = 64

    Ensuite ça dans GetUserInfoFromEmail :
    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
                int titi = 0;
                int j = 0;
                while (titi == 0)
                {
                    try
                    {
                        OleDbConnection1.Open();
                        j++;
     
     
                        System.Data.OleDb.OleDbCommand oleDBCmd = OleDbConnection1.CreateCommand();
                        oleDBCmd.CommandText = "...";
     
                         // Create the SqlDataReader object and return it
                        dr = oleDBCmd.ExecuteReader(CommandBehavior.CloseConnection);
                        dr.Close();
                    }
                    catch
                    {
                        titi = j;
                    }
                }
    Si je mets dr.Close() en commentaire, ça plante pour j = 64

    De fil en aiguille, j'ai trouvé ma connerie. En fait, il y avait un autre datareader imbriqué qui lui n'était pas fermé au bon endroit ! Le nombre 10 n'était finalement que pur hasard (ca plantait à la 11e connexion).
    Voilà, j'ai perdu du tps pour rien, et désolé d'avoir fait perdre le tien.
    Cela soulève qd meme qq questions :
    - j=64, ça voudrait dire que pool de connexions est à 64 ? J'ai tenté de mettre "Pooling=False;" dans la chaine de connexion mais il y a l'erreur suivante : "Pilote ISAM introuvable". Il semblerait que Jet n'accepte pas certaines propriétés (comme Connection timeout par exemple).
    - Le nombre de connexions est limité à 64 pour Jet ? Je croyais que c'était 255 ?
    - Est-ce en rapport avec le fait que "IE ouvre 4 connexions d'un coup" ?

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

Discussions similaires

  1. [Accès BDD & silverlight] Access 2000-2003
    Par Choucha dans le forum Silverlight
    Réponses: 3
    Dernier message: 11/01/2009, 12h17
  2. Import d'une bdd Access dans SQL Server 2005 /2000
    Par nanterrien dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 06/10/2008, 15h03
  3. Ouverture BDD Access 2000 sous Access 2003
    Par Expensive dans le forum Access
    Réponses: 5
    Dernier message: 10/02/2007, 11h00
  4. [access2003] Probleme ouverture BDD access 2000
    Par sandrine dans le forum Access
    Réponses: 1
    Dernier message: 18/11/2005, 20h24
  5. pb d'importation Access 2000 ==> SQL Server 7.0
    Par diabolooo dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 20/08/2003, 16h49

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