Dernière mise à jour :2008-07-24

informatique

Cet article montre comment se servir de la technologie .Net de Microsoft pour présenter dans une page web dynamique, des données en provenance d'une base de données Oracle. Il vise à décrire comment retrouver un jeu d'enregistrements depuis un curseur déclaré dans une procédure (stored procedure) et afficher ce résultat dans une page ASP.Net.

En effet, lorsque vous créé une application web, il est toujours plus sécuritaire d'utiliser des procédures internes plutôt que de créer les requêtes directement dans les pages de l'application car si le serveur Web de l’application est compromit, un pirate pourrait les utiliser à des fins de « SQL injection ».

Pour réaliser celà, vous devez disposer des outils suivant :

  • Un client Oracle 8.1.7 ou plus,
  • Le .Net framework,
  • Le «Microsoft .Net Managed Provider for Oracle»

Si tout est bien installé, débutons dès maintenant la démonstration. Celle-ci sera divisée en deux étapes de développement soit :

  • Création d'un package contenant une procédure
  • Création du code ASP.Net d'affichage du résultat de la sélection

Contexte

Imaginons que vous désirez présenter dans une page web, la liste des employés d'une succursale précise de votre entreprise, c'est-à-dire que l'utilisateur de l'application devra d'abord choisir le nom d'une succursale pour ensuite voir les résultats. Cette information est présente dans la table EMPLOYERS de votre base de données Oracle. Cette table est constitué de quatre champs soit : NO_EMPLOYER, NOM_EMPLOYER, PRENOM_EMPLOYER, SUCCURSALE. Le premier est un champ NUMBER et les trois autres, des champs VARCHAR2.

Création d'un package contenant une procédure

Il faut d'abord créer le package suivant sur la base de donnée Oracle.

Listing 1.0 Création d'un package dans Oracle
1. CREATE OR REPLACE PACKAGE PKG_EMP AS
2.      TYPE r_cursor IS REF CURSOR;
3.      PROCEDURE PRC_EMP(p_succ IN VARCHAR2,
4.      p_cur OUT r_cursor);
5. END PKG_EMP;
6. /

Il faut ensuite créer le corps du serveur, c'est-à-dire, la procédure qui sera appelée par notre page web.

Listing 2.0 Création d'une procédure dans le package
1. CREATE OR REPLACE PACKAGE BODY PKG_EMP AS
2. PROCEDURE PRC_EMP(p_succ IN VARCHAR2, p_cur OUT r_cursor)
3. IS
4.     v_cur r_cursor;
5. BEGIN
6.     OPEN v_cur FOR
7.     SELECT no_employer, nom_employer, prenom_employer
8.     FROM employers
9.     WHERE succursale = p_succ;
10.     p_cur := v_cur;
11. END PRC_EMP;
12. END PKG_EMP;
13. /

Il faut maintenant créer une page HTML dans laquelle un formulaire présentera une liste déroulante permettant à l'utilisateur de choisir le nom de la succursale dont il veut consulter la liste des employers. Voici le code de cette page :

Listing 3.0 Création page HTML
1. <html>
2. <head>
3. <title>Exemple - appel de procédure Oracle avec asp.net</title>
4. </head>
5. <body>
6. <form name="form1" action="page2.aspx" method="post">
7. <select size="1" name="selectSucc">
8. <option value="succursale 1">succursale 1</option>
9. <option value="succursale 2">succursale 2</option>
10. <option value="succursale 3">succursale 3</option>
11. </select>
12. </form>
13. </body>
14. </html>

Comme vous pouvez le constater en regardant le code ci-dessus, la méthode de transfert des informations choisit est «post» et le paramètre contenant le nom de la succursale est «selectSucc».

Voici maintenant le code permettant de créer une page asp.net pour afficher ces informations :

Listing 4.0 Exemple de page ASP.NET avec appel de procédure Oracle
1. <%@ Page Language="C#" %>
2. <%@ import Namespace="System.Data" %>
3. <%@ import Namespace="System.Data.OracleClient" %>
4. <script runat="server">
5. 
6. void Page_Load(Object Src, EventArgs E)
7. {
8.  OracleConnection OraCon = new OracleConnection();
9.  OraCon.ConnectionString = "data source=nom_source;user id=nom_utilisateur;password=mot_de_passe;";
10.  OraCon.Open();
11.
12.  OracleCommand OraCom = new OracleCommand();
13.  OraCom.Connection = OraCon;
14.  OraCom.CommandText = "PKG_EMP.PRC_EMP";
15.  OraCom.CommandType = CommandType.StoredProcedure;
16.  OracleParameterCollection OraParamCollection = OraCom.Parameters;
17.  OraParamCollection.Add("p_succ", OracleType.VarChar);
18.  OraParamCollection[0].Value = Request.Form["selectSucc"];
19.  OraParamCollection.Add("p_cur", OracleType.Cursor);
20.  OraParamCollection[1].Direction = ParameterDirection.Output;
21.
22.  OracleDataAdapter OraDA = new OracleDataAdapter(OraCom);
23.
24.  DataSet OraDS = new DataSet();
25.
26.  OraDA.Fill(OraDS);
27.
28.  foreach(DataRow myRow in OraDS.Tables[0].Rows)
29.  {
30.    TableRow objRow = new TableRow();
31.    foreach(DataColumn myCol in OraDS.Tables[0].Columns)
32.    {
33.     TableCell objCell = new TableCell();
34.     objCell.Text = myRow[myCol].ToString();
35.     objRow.Cells.Add(objCell);
36.    }
37.    tbl1.Rows.Add(objRow);
38.  }
39.
40.  OraCon.Close();
41. }
42.
43. </script>
44.
45. <html>
46. <head>
47. <title>Exemple de connexion Oracle</title>
48. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
49. </head>
50. <body>
51. <asp:Table id="tbl1" runat="server" borderwidth="1" />
52. </body>
53. </html>

Auteur : Sylvain Bilodeau

Date de mise en ligne : 2003-09-16

Aucun commentaire pour l'instant.