Bonjour à tous, j'ai un devoir pour l'université qui consiste à créer un petit logiciel en utilisant une base de données Oracle. Dans le travail, il est demandé que toutes les accès à la base de données soient faites via des procédures stockées. Comme projet, je veux faire un petit système de facture avec des pièces informatiques. Je veux donc gérer une partie parent (le client) ainsi qu'une partie enfant (les éléments de la facture).

J'aimerais fonctionner de la façon suivante : j'entre le numéro du client et les informations (nom, prénom, adresse et numéro de téléphone) apparaissent automatiquement dans les TextBox prévues à cet effet.

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
 
create or replace
PROCEDURE GETCLIENTINFO(
  p_clientid in varchar2,
  p_clientnom out varchar2,
  p_clientprenom out varchar2,
  p_clientadresse out varchar2,
  p_clienttelephone out varchar2
) AS
 
BEGIN  
  select clientnom, clientprenom, clientadresse, clienttelephone
  into p_clientnom, p_clientprenom, p_clientadresse, p_clienttelephone
  from client
  where clientid = p_clientid;
  commit;
 
END GETCLIENTINFO;
Le code dans mon logiciel 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
 
private void btnClient_Click(object sender, EventArgs e)
        {
            OracleParameter[] collection = {    
                //new OracleParameter("p_factureID", OracleType.Number, 0, System.Data.ParameterDirection.Input, null, System.Data.DataRowVersion.Default, true, 3),
 
                new OracleParameter("p_clientid", OracleType.VarChar, 0, System.Data.ParameterDirection.Input, null, System.Data.DataRowVersion.Default, true, txtClientID.Text),
                new OracleParameter("p_clientnom", OracleType.VarChar, 0, System.Data.ParameterDirection.Output, null, System.Data.DataRowVersion.Default, true, 0),
                new OracleParameter("p_clientprenom", OracleType.VarChar, 0, System.Data.ParameterDirection.Output, null, System.Data.DataRowVersion.Default, true, 0),
                new OracleParameter("p_clientadresse", OracleType.VarChar, 0, System.Data.ParameterDirection.Output, null, System.Data.DataRowVersion.Default, true, 0),
                new OracleParameter("p_clienttelephone", OracleType.VarChar, 0, System.Data.ParameterDirection.Output, null, System.Data.DataRowVersion.Default, true, 0)
 
                       };
            //MessageBox.Show("IDClient : " + txtClientID.Text);
            interfaceBD.appelerProcedureStockee("GETCLIENTINFO", collection);
            MessageBox.Show("Résultat : " + collection[2].Value.ToString());
            //txtClientNom.Text = collection[1].Value.ToString();
        }
interfaceBD est une interface que notre enseignant nous a donné afin de simplifier les connexions/déconnexions à la BDD. En gros, le code ci haut prend comme premier paramètre mon texte dans ma TextBox et les 4 autres sont des sorties que j'aimerais voir afficher.

Par contre, quand j'exécute mon logiciel, que je rentre un ID de client, j'obtiens l'erreur suivante.

ORA-06502 : PL/SQL : erreur numérique ou erreur sur une valeur
ORA-06512 : à "SMI1002_14.GETCLIENTINFO", ligne 14
ORA-06512 : à ligne 1
La ligne 14 correspond au BEGIN dans ma procédure stockée. J'ai effacé les commentaires que j'avais placé pour des fins de tests.

Je sais que c'est un peu long comme post, mais j'ai passé plus de 4 heures aujourd'hui à essayer de résoudre le problème sans succès. Si une âme charitable aurait un tuyau pour moi, je lui serais très reconnaissant.

Merci beaucoup et bonne journée (ou soirée) à vous tous.