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# :
Procédure stockée :
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);
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)
Partager