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)