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.
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 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;
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.
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(); }
Par contre, quand j'exécute mon logiciel, que je rentre un ID de client, j'obtiens l'erreur suivante.
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.ORA-06502 : PL/SQL : erreur numérique ou erreur sur une valeur
ORA-06512 : à "SMI1002_14.GETCLIENTINFO", ligne 14
ORA-06512 : à ligne 1
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.
Partager