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 :

C# et Procédure stockées ORACLE


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut C# et Procédure stockées ORACLE
    Bonjour.

    Je developpement une application WinForms ( Visual Studio 2015 ).
    J'utilise le package Nuget Oracle ODP 12c.

    Mon problème :
    Lorsque que j’exécute la procédure avec Oracle Sql Developper, j'ai le bon retour.
    Lorsque j'appel la procédure avec mon application je recupère les valeurs qui sont initalisé dans la gestion d'exception.
    Je ne comprends pas pourquoi.
    La connexion avec Oracle se fait bien mais pourquoi la procédure passe dans la gestion d'exception ?

    Le code C# :

    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
                String sConnectString = "";
                String _oraCnxTimeOut = "";
                String _oraIP = "XXX.XXX.XXX.XXX";
                String _oraPort = "1521";
                String _oraService = "Service";
                String _oraUser = "User";
                String _oraPasswd = "PWD";
     
                sConnectString = "Data Source=(DESCRIPTION= (CONNECT_TIMEOUT=" + _oraCnxTimeOut.ToString() + ")";
                sConnectString += "(TRANSPORT_CONNECT_TIMEOUT =3)(RETRY_COUNT=1)";
                sConnectString += "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + _oraIP + ")(PORT=" + _oraPort.ToString() + ")))";
                sConnectString += "(CONNECT_DATA=(SERVICE_NAME=" + _oraService + ")));";
                sConnectString += "User Id=" + _oraUser + ";Password=" + _oraPasswd + ";";
                sConnectString += "Connection Timeout=" + _oraCnxTimeOut.ToString() + ";";
     
                OracleConnection OraCnx = new OracleConnection(sConnectString);
                OraCnx.Open();
                OracleCommand OraCmd = new OracleCommand();
     
                OraCmd.CommandType = CommandType.StoredProcedure;
                OraCmd.CommandText = "TR_RECH_REF_DM";
                OraCmd.Connection = OraCnx;
     
     
                OracleParameter OP_DM = new OracleParameter("DM",OracleDbType.Varchar2,ParameterDirection.Input);
                OracleParameter OP_REF = new OracleParameter("REFE", OracleDbType.Varchar2, ParameterDirection.Output);
                OracleParameter OP_Stat_Retour = new OracleParameter("Stat_Retour",OracleDbType.Int32,ParameterDirection.InputOutput);
     
                String Reference = "";
                short Retour = 999;
     
                OP_DM.Value = "DS";
                try
                {
                    OraCmd.ExecuteNonQuery();
                    Reference = OP_REF.Value.ToString();
                    Retour = short.Parse  ( OP_Stat_Retour.Value.ToString());
                }
                catch (Exception Ex)
                {
                    MessageBox.Show(Ex.Message);
                }
                OraCnx.Close();
                MessageBox.Show("Fin ===>" + Retour.ToString() + "===>" + Reference);
    Procédure stockée :
    Je ne peux pas faire de modification dans le procédure puisque je n'ai pas accès au serveur de prod et que la procédure est utilisée par plusieurs application.

    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
    create or replace
    PROCEDURE TR_RECH_REF_DM (DM  IN VARCHAR2, REFE IN OUT VARCHAR2, Stat_Retour IN OUT NUMBER
    ) IS
    --
    -- Variables de traitement des fichiers
    ---------------------------------------
    --
    mess_ora  	varchar2(150);   /* message d'erreur oracle    */
    --
    --
    -- variables de traitement
    --------------------------
    --
    Op_Existe   number;
    MaxDate  	date;
    --
    --  Début de traitement
    -----------------------
    --
    BEGIN
    	--
    	-- A priori recherche correcte
    	------------------------------
    	--
    	Stat_Retour := 1;
    	--
    	--------------------------------------
    	-- Recherche de la dernière référence
    	--------------------------------------
    	--
      SELECT REF_PIECE INTO REFE FROM GAMME_ASSOCIATION_DM
    	WHERE DM_PIECE = DM AND DATE_ASSOCIATION = (SELECT MAX(DATE_ASSOCIATION) FROM GAMME_ASSOCIATION_DM WHERE DM_PIECE = DM);
    	--
    	--
    	-- Erreurs pendant les traitements
    	----------------------------------
    	-- 
    	EXCEPTION
    		WHEN NO_DATA_FOUND THEN
    			Stat_retour := -1;
    		WHEN OTHERS THEN
    			Stat_retour := -10;
    END TR_RECH_REF_DM;

    Merci pour les retours
    (je bloque depuis deux jours)

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    La première des info à nous donner serait l'exception qui survient !

    Maintenant, en regardant rapidement le code, il y a bien des paramètres pour la procédure stockée de déclarés, mais ils ne sont pas passés à la procédure.

    Il manque des OraCmd.Parameters.Add.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci

    Je vais tester ça demain.

    Pour l'exception je recupère la valeur -10 en retour d'oracle.
    je ne sais pas quel est l'exception levée par Oracle.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai modifier le code pour ajouter les paramètres et j'ai réussi a retrouver le code erreur retourner par oracle => 6502

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                OracleParameter OP_DM = new OracleParameter();
                OracleParameter OP_REF = new OracleParameter();
                OracleParameter OP_Stat_Retour = new OracleParameter();
     
                OP_DM = OraCmd.Parameters.Add("DM", OracleDbType.Varchar2, ParameterDirection.Input);
                OP_REF = OraCmd.Parameters.Add("REFE", OracleDbType.Varchar2, ParameterDirection.Output);
                OP_Stat_Retour = OraCmd.Parameters.Add("Stat_Retour", OracleDbType.Int32, ParameterDirection.InputOutput);
    Je ne comprends absolument rien a ce qui se passe !

    Quand je supprime le paramètre OP_REF et que je modifie la procédure stockée pour supprimer le paramètrede retour, je n'ai plus d'exception.

    Je pense que le problème vient de la déclaration du paramètre de retour en chaine "OP_REF" et la je ne comprend pas ce qu'il faut mettre et j'ai du pal a trouver de la doc sur le 10 surcharges (10 c'est trop !)
    Je veux juste récupérer en retour une chaine de 15 caractères. Rien de plus.

  5. #5
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Malheureusement, je ne m'y connais absolument pas en Oracle. Je ne peux vous aider plus la dessus...
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Du coup je me sent très seul !

    Merci quand même .

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai trouvé !!!!

    Quand on déclare un paramètre de type chaine (Varchar2) et bien il ne faut pas oublier d'aller initialiser la taille de la variable !

    Mais pourquoi dans une des surcharge il y a la déclaration de la taille ???? et que cela ne sert à rien ???

    donc
    Première ligne on déclare le paramètre
    et puis après on lui donne la taille.
    Mais que pour les paramètres de sorties .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      OP_REF = OraCmd.Parameters.Add("REFE", OracleDbType.Varchar2,ParameterDirection.Output);
      OraCmd.Parameters["REFE"].Size = 15;
    j'ai trouvé de l'aide sur ici
    http://stackoverflow.com/questions/2...rocedure-error

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

Discussions similaires

  1. [ADO]Procédure stocké Oracle
    Par chalem dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/04/2007, 20h21
  2. Procédures stockées ORACLE 10g - JAVA 1.6
    Par poussinette0712 dans le forum JDBC
    Réponses: 2
    Dernier message: 27/03/2007, 00h49
  3. procédure stockée Oracle depuis VB.net
    Par marcusien dans le forum SQL
    Réponses: 18
    Dernier message: 09/03/2007, 20h53
  4. procédure stockée + Oracle
    Par BONNEFOI Patrick dans le forum Bases de données
    Réponses: 4
    Dernier message: 19/04/2005, 15h09
  5. procédure stockée Oracle dans delphi 6
    Par UPNE387 dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/05/2004, 09h47

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