Bonjour, j'ai un petit problème avec l'exécution d'une procédure stockée dans ORACLE que je veux faire fonctionner avec C#.

voilà le code de ma 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
create or replace
PROCEDURE MODIFIE_FOURNISSEUR(IDFOURNISSEUR IN FOURNISSEURS.PK_FOURNISSEUR_ID%TYPE, P_SOCIETE IN FOURNISSEURS.SOCIETE%TYPE, 
                              P_CONTACT IN FOURNISSEURS.CONTACT%TYPE, P_TEL IN FOURNISSEURS.TEL%TYPE, P_RUEETNUM IN FOURNISSEURS.RUE_NUM%TYPE,
                              P_Ville IN FOURNISSEURS.VILLE%TYPE, P_CodePostal IN FOURNISSEURS.CP%TYPE, ErrorMessage out varchar2)
IS
FOURNISSEUREXISTE INTEGER;
FournisseurNOEXISTANT EXCEPTION;
 
BEGIN
    Select count(*) into fournisseurexiste from fournisseurs where FOURNISSEURS.PK_FOURNISSEUR_ID=IDFOURNISSEUR;  
 
    IF FOURNISSEUREXISTE>0 THEN
      UPDATE FOURNISSEURS 
      SET SOCIETE = P_SOCIETE,
          CONTACT = P_CONTACT,
          TEL = P_TEL,
          RUE_NUM = P_RUEETNUM,
          VILLE = P_VILLE,
          CP = P_CODEPOSTAL
      WHERE PK_FOURNISSEUR_ID = IDFOURNISSEUR;
      ErrorMessage := 'La mise à jour s''est faite correctement';
    ELSE
      RAISE FournisseurNoExistant;
    END IF;
 
EXCEPTION
  WHEN FOURNISSEURNOEXISTANT THEN
    ErrorMessage := 'Le fournisseur ne figure pas dans la DB';
END;

et j'essaye d’exécuter ça avec le code suivant :

Code C# : 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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
static public bool modifierFournisseur(int ID, string Societe, string contact, string tel, string rue_num, string ville, string CodePostal, ref string ErrMsg)
        {
            bool retVal = false;
            int nombreDeModif;
 
            OracleConnection con = Utilitaire.getConnection();
            OracleCommand commandeModif = new OracleCommand();
            commandeModif.CommandType = System.Data.CommandType.StoredProcedure;
            commandeModif.Connection = con;
            commandeModif.CommandText = "MODIFIE_FOURNISSEUR";
 
            OracleParameter param1 = new OracleParameter(":1", OracleDbType.Int32);
            OracleParameter param2 = new OracleParameter(":2", OracleDbType.Varchar2);
            OracleParameter param3 = new OracleParameter(":3", OracleDbType.Varchar2);
            OracleParameter param4 = new OracleParameter(":4", OracleDbType.Varchar2);
            OracleParameter param5 = new OracleParameter(":5", OracleDbType.Varchar2);
            OracleParameter param6 = new OracleParameter(":6", OracleDbType.Varchar2);
            OracleParameter param7 = new OracleParameter(":7", OracleDbType.Varchar2);
            OracleParameter param8 = new OracleParameter(":2", OracleDbType.Varchar2, System.Data.ParameterDirection.Output);
            param8.OracleDbType = OracleDbType.Varchar2;
 
            param1.Value = ID;
            param2.Value = Societe;
            param3.Value = contact;
            param4.Value = tel;
            param5.Value = rue_num;
            param6.Value = ville;
            param7.Value = CodePostal;
            param8.Value = ErrMsg;
 
            commandeModif.Parameters.Add(param1);
            commandeModif.Parameters.Add(param2);
            commandeModif.Parameters.Add(param3);
            commandeModif.Parameters.Add(param4);
            commandeModif.Parameters.Add(param5);
            commandeModif.Parameters.Add(param6);
            commandeModif.Parameters.Add(param7);
            commandeModif.Parameters.Add(param8);
 
            try
            {
                con.Open();
                nombreDeModif = (int) commandeModif.ExecuteNonQuery();
 
                if (nombreDeModif > 0)
                    retVal = true;
                else
                    retVal = false;
 
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                con.Close();
            }
 
            return retVal;
        }

à savoir que je travail en 4 couches (PL, DAL, BLL et BO)

Le problème c'est que je ne sais pas comment exécuter ma procédure via le C#, le code que j'ai mis ne m'exécute pas ma procédure lorsque je tente une modification. Est-ce que le fait de mettre un paramètre de type ref dans ma méthode C# ça va passer avec mon paramètre OUT de ma procédure stockée ?

voilà j'espère que je suis déjà au bon endroit pour poser ma question et j'espère aussi avoir été assez clair dans ma question :s

Merci d'avance pour les réponses.