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

Accès aux données Discussion :

[ADO.NET][Oracle] Pourquoi ai-je un problème de connexion au serveur Oracle ?


Sujet :

Accès aux données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 25
    Points
    25
    Par défaut [ADO.NET][Oracle] Pourquoi ai-je un problème de connexion au serveur Oracle ?
    Bonjour, je ne sais pas si je suis sur le bon forum, donc si ce n'est pas le bon veuillez m'en excuser .

    J'ai développé une application aspx qui se connecte à une base Oracle située sur un serveur distant.
    Jusqu'à il ya quelques jours, tout allait bien l'application fonctionnait. J'ai par la suite réinstallé Oracle Client 9i (R2) sur mon ordi de développement, ainsi que le data.provider pour Oracle et depuis impossible de me logger via l'application :

    Le log d'erreur donne l'information suivante :
    Application : Oracle.DataAccess
    Message : La référence d'objet n'est pas définie à une instance d'un objet.
    Exception: : System.NullReferenceException
    Lien d'aide:
    Machine Cliente: localhost (127.0.0.1)
    Source : get_Source
    Stack Trace : at Oracle.DataAccess.Client.OracleException.get_Source()
    Le web.config de l'application ainsi que le TNSNames d'Oracle n'ont pas été modifiés (j'ai vérifié).
    J'ai mis les droits sur le répertoire bin d'Oracle à "Tout le monde" histoire que les problèmes de droits d'accès aux dll soient écartés.

    J'ai vérifié qu'Oracle.dataAccess existait bien dans le répertoire bin.
    J'ai recompilé mon application en mettant à jour la référence vers la dll d'oracle.

    J'ai regardé dans les services : J'ai deux services Oracles sur ma machine client :
    OracleMTSRecoveryService et OracleOraHome92ClientCache
    Le second était arrêté. je l'ai donc démarré, j'ai redémarré le premier.
    Attendu 10 bonnes mniutes, relancé l'application.

    Toujours le même problème, l'application refuse de se connecter au serveur. (Alors qu'à partir d'un autre ordinateur, pour le même serveur, elle fonctionne sans problèmes)

    Je fonctionne sous windows XP Pro

    Si vous avez des idées, je suis preneur, et vous remercie d'avance.

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    System.NullReferenceException
    Tu as une variable qui est déclarée mais pas initialisée....

    Sans voir ton code, ca va être dur de t'aider mais bon, essaye d'enquêter du coté de get_Source

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 25
    Points
    25
    Par défaut
    Re bonjour ^^

    Et bien pour détailler voici les parties du code concernées : (Il est séparé dans différentes classes) vous trouverez un quickwatch sur la connection à la fin.

    L'application crée une instance d'utilisateur, puis lance la fonction de vérification de droits :

    Classe Utilisateur

    Constructeur d' Utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Utilisateur()
    {
    _connection = new VfwConnexion(chaineConnexion);
    }
    Une instance de connexion est créée, voici le code du constructeur prenant la chaine du web.config en paramètres :

    Classe VfwConnexion :

    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
     
    public VfwConnexion(string connectionWebConfig)
    {
      // On initialise la chaine de connexion technique à partir de web.config
      String[] sTmp = ConfigurationSettings.AppSettings.GetValues
    (connectionWebConfig);
      string[] sTmp2 = (sTmp[0]).Split('/');
      StringBuilder sb = new StringBuilder(sTmp2[1]);
      if (_blPooling)
      { sb.Append("; Pooling=true");}
      _chaineConnection = sb.ToString();
      TypeBase = Convert.ToInt32(sTmp2[0]);
     
      if(TypeBase == 0)
      { ConnectionSQL = new SqlConnection(_chaineConnection);}
      if(TypeBase == 1)
      { ConnectionOracle = new OracleConnection(_chaineConnection);}
    }
    La ligne qui nous intéresse est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ConnectionOracle = new OracleConnection(_chaineConnection);
    _chaineConnection possède bien la bonne valeur :
    "User Id=tech;Password=tech;Data Source=VSBT; Pooling=true"

    Que vaut ConnectionOracle à ce moment là?
    Et bien le quickwatch indique "undefined_value" J'ai cru qu'il n'avait pas eu le temps de l'initialiser, donc j'ai demandé de parcourir un pas de plus(fin de la fonction). Il reste à undefined value, alors que je peux voir les autres valeurs telles que TypeBase.




    Suite peu utile puisque l'instance d'OracleConnection n'a pas été créée. Je la laisse cependant



    L'obet ConnectionOracle est crée, on est pret à se connecter à la base et à. lancer la requete.
    On lance la méthode de vérification d'utilisateur

    Classe Utilisateur:Objet_Metier

    Méthode VerifUtilisateur :

    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
    ...
    try
    {
       string cleSecrete = VfwCrypto.CalculerClefSecrete
    (monPasswordATester,ChaineBaseCrypto);
       _adapter.SelectCommand = _connection.CreateCommand();
       _adapter.SelectCommand.CommandType = 
    System.Data.CommandType.StoredProcedure;
       _adapter.SelectCommand.CommandText = "VerifAuth";
     
       _adapter.SelectCommand.Parameters.Clear();
       _adapter.SelectCommand.Parameters.Add("@Login", monLoginATester);
       _adapter.SelectCommand.Parameters.Add("@MotDePasse", 
    VfwCrypto.CalculerClefSecrete(monPasswordATester,ChaineBaseCrypto));
     
       VfwParameter monOutputTypeSource = 
    _adapter.SelectCommand.Parameters.Add("@TypeSource", SqlDbType.Int, 4); 
       monOutputTypeSource.Direction = ParameterDirection.Output;
       VfwParameter monOutputCodeSource = 
    _adapter.SelectCommand.Parameters.Add("@Code_source", SqlDbType.UniqueIdentifier, 16); 
      monOutputCodeSource.Direction = ParameterDirection.Output;
      VfwParameter monOutputCodePersonne = 
    _adapter.SelectCommand.Parameters.Add("@Code_personne", SqlDbType.UniqueIdentifier, 16); 
      monOutputCodePersonne.Direction = ParameterDirection.Output;
     
      VfwParameter monOutputCodeUtilisateur = 
    _adapter.SelectCommand.Parameters.Add("@Code_utilisateur", SqlDbType.UniqueIdentifier, 16); 
      monOutputCodeUtilisateur.Direction = ParameterDirection.Output;
      VfwParameter monOutputErreurAuthentification = 
    _adapter.SelectCommand.Parameters.Add("@ErreurAuthentification", SqlDbType.Int, 4);
      monOutputErreurAuthentification.Direction = ParameterDirection.Output;
     
      ExecuterRequete(_adapter.SelectCommand);
    
    ...
    L'erreur survient à ExecuterRequete


    Classe Objet_Metier

    Méthode ExecuterRequete


    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
    
    protected virtual void ExecuterRequete(VfwCommand command)
    {
      if (_transaction != null)
      {
        _executionRequeteSimple = true;
        ExecuterRequete(command, true);
        _executionRequeteSimple = false;
      }
      else
      {
        try
        {
          if (_connection.State == ConnectionState.Closed) 
          {
            _connection.Open();
            command.ExecuteNonQuery();
          }
        }
        catch(Exception e)
        { VfwLog.EnregistrerErreur(e, 1);}
        finally
        {
          if (_connection.State == ConnectionState.Open)
          { _connection.Close();}
        }
      }
    }
    _connection.State est pour le moment à closed, l'appli entre bien dans le test et lance : _connection.Open();

    _connection est une instance de VfwConnexion

    Classe VfwConnexion

    Méthode 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
    15
     
    public OracleConnection ConnectionOracle;
     //On retrouve ConnectionOracle dont les valeurs
    // ont été définies dans le constructeur de cette classe.
    
    public SqlConnection ConnectionSQL;
    
    public void Open()
    {
      if(TypeBase == 0)
      { ConnectionSQL.Open();}
      if(TypeBase == 1)
      { ConnectionOracle.Open();}
    }
    Dans le web.config, le type de base est à 1, ca se vérifie ici aussi l'application entre dans le test "typeBase == 1 et tente d'ouvrir la connectionOracle

    Et la c'est le drame ^^

    si je fais un quickwatch sur connectionOracle (ou sur _connection) voici le résultat :
    http://tourmisd.free.fr/quickwatch_connexion.jpg

    Voila en détaillé ce que cela donne ^^

    Merci en tous cas pour vos réponses

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 25
    Points
    25
    Par défaut
    Après une longue absence, pour m'aerer les neurones, j'ai fini par résoudre le problème.

    Je sais que vous y avez réfléchi avez tenté de m'aider donc merci à vous ^^

    Apparamment c'était un composant Oracle qui était absent ou corrompu. J'ai désinstallé Oracle Client (et tous les composants Oracle).
    J'ai supprimé tout le repertoire Oracle restant (chose que je n'avais pas faite)
    J'ai redémarré, réinstallé le Client Oracle avec tous les composants.
    Recrée mon fichier TSNAMES.ora.

    Et j'ai enfin pu lancer l'application.

    Voila voila... ^^

    Bonne continuation à vous

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

Discussions similaires

  1. [ADO.Net][Access] Pourquoi ai-je une erreur lors de l'Update ?
    Par nazimb dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/05/2006, 09h37
  2. [ADO.Net][OleDb] Pourquoi ma requête access ne fonctionne pas?
    Par Bapt.ice dans le forum Accès aux données
    Réponses: 6
    Dernier message: 05/05/2006, 17h19
  3. [ADO.Net][C#] Pourquoi OracleConnection lève une exception ?
    Par meuledor dans le forum Accès aux données
    Réponses: 2
    Dernier message: 26/01/2006, 17h54
  4. [ADO.Net][C#]Pourquoi connexion fermée est active>SQLServ
    Par superbobo dans le forum Accès aux données
    Réponses: 3
    Dernier message: 25/01/2006, 17h57
  5. Réponses: 2
    Dernier message: 26/10/2005, 11h44

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