begin process at 2010 02 10 02:37:48
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > CLASSE DE CONNEXION ORACLE

CLASSE DE CONNEXION ORACLE


 Information sur la source

Note :
9,57 / 10 - par 7 personnes
9,57 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de données Source .NET ( DotNet ) Classé sous :connexion, connection, oracle, db Niveau :Débutant Date de création :25/08/2004 Date de mise à jour :04/02/2008 10:06:18 Vu / téléchargé :28 563 / 1 370

Auteur : JuS

Ecrire un message privé
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

 Description

Cette classe permet de se connecter à une base de données Oracle, de récupérer les données (SELECT), de faire des modifications (UPDATE, DELETE) et de lancer des procédures et des fonctions stockées.

Source

  • using System;
  • using System.Windows.Forms;
  • using System.Collections;
  • using System.Data.OracleClient;
  • using System.Data;
  • namespace ConnexionOracle
  • {
  • /// <summary>
  • /// Classe permettant l'interface avec Oracle
  • /// </summary>
  • public class classOracle
  • {
  • #region Variables
  • /// <summary>
  • /// User Oracle
  • /// </summary>
  • private string sUser;
  • /// <summary>
  • /// Mot de passe Oracle
  • /// </summary>
  • private string sPassword;
  • /// <summary>
  • /// Nom de la base Oracle
  • /// </summary>
  • private string sBase;
  • /// <summary>
  • /// Nombre de lignes du résultat d'une requête
  • /// </summary>
  • private int iNbRows;
  • /// <summary>
  • /// Nombre de colonnes du résultat d'une requête
  • /// </summary>
  • private int iNbCols;
  • /// <summary>
  • /// Connexion à la base de données Oracle
  • /// </summary>
  • private OracleConnection oracleCnx;
  • /// <summary>
  • /// Instruction SQL ou procédure stockée à exécuter
  • /// </summary>
  • private OracleCommand oracleCmd;
  • /// <summary>
  • /// Flux de lignes de données stockant le résultat d'une requête
  • /// </summary>
  • private OracleDataReader oracleReader;
  • #endregion
  • #region Propriétés
  • /// <summary>
  • /// Affecte ou récupère le login Oracle
  • /// </summary>
  • public string User
  • {
  • get
  • {
  • return this.sUser;
  • }
  • set
  • {
  • this.sUser = value;
  • }
  • }
  • /// <summary>
  • /// Affecte ou récupère le mot de passe Oracle
  • /// </summary>
  • public string Password
  • {
  • get
  • {
  • return this.sPassword;
  • }
  • set
  • {
  • this.sPassword = value;
  • }
  • }
  • /// <summary>
  • /// Affecte ou récupère la base Oracle
  • /// </summary>
  • public string Base
  • {
  • get
  • {
  • return this.sBase;
  • }
  • set
  • {
  • this.sBase = value;
  • }
  • }
  • /// <summary>
  • /// Récupère le nombre de ligne d'une requête
  • /// </summary>
  • public int NbRows
  • {
  • get
  • {
  • return this.iNbRows;
  • }
  • }
  • /// <summary>
  • /// Récupère le nombre de colone d'une requête
  • /// </summary>
  • public int NbCols
  • {
  • get
  • {
  • return this.iNbCols;
  • }
  • }
  • #endregion
  • #region Constructeur de la classe classOracle
  • /// <summary>Constructeur de la classe</summary>
  • public classOracle()
  • {
  • this.sUser = "";
  • this.sPassword = "";
  • this.sBase = "";
  • this.iNbRows = 0;
  • this.iNbCols = 0;
  • this.oracleCnx = new OracleConnection();
  • this.oracleCmd = new OracleCommand();
  • this.oracleReader = null;
  • }
  • #endregion
  • #region Connexion à la base de données Oracle
  • /// <summary>Lance un ordre de connexion à la base Oracle</summary>
  • /// <example>
  • /// classOracle monOracle = new classOracle();
  • /// monOracle.setUser("Toto");
  • /// monOracle.setPassword("mdp");
  • /// monOracle.setBase("maBase");
  • ///
  • /// if(this.monObjetOracle.connect())
  • /// {
  • /// ...
  • /// }
  • /// </example>
  • public bool connect()
  • {
  • try
  • {
  • this.oracleCnx.ConnectionString = "Password=" + this.sPassword + ";User ID=" + this.sUser + ";Data Source=" + this.sBase;
  • this.iNbCols = 0;
  • this.iNbRows = 0;
  • oracleCnx.Open();
  • return true;
  • }
  • catch(Exception)
  • {
  • MessageBox.Show("Impossible de se connecter à la base de données","Erreur Oracle",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);
  • return false;
  • }
  • }
  • #endregion
  • #region Déconnexion de la base de données Oracle
  • /// <summary>
  • /// Lance un ordre de déconnexion de la base de données Oracle
  • /// </summary>
  • /// <example>
  • /// classOracle monOracle = new classOracle();
  • /// ...
  • /// this.monOracle.deconnect();
  • /// </example>
  • public bool deconnect()
  • {
  • try
  • {
  • oracleCnx.Close();
  • return true;
  • }
  • catch(Exception ex)
  • {
  • MessageBox.Show(ex.Message,"Erreur Oracle",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);
  • return false;
  • }
  • }
  • #endregion
  • #region Récupère les valeurs d'une requête
  • /// <summary>Récupère les valeurs d'une requête</summary>
  • /// <param name="sQuery">Requête à exécuter</param>
  • /// <returns>Renvoi les valeurs de la requête</returns>
  • /// <example>
  • /// classOracle monOracle = new classOracle();
  • /// monOracle.setUser("Toto");
  • /// monOracle.setPassword("mdp");
  • /// monOracle.setBase("maBase");
  • ///
  • /// if(this.monObjetOracle.connect())
  • /// {
  • /// string sQuery="SELECT COUNT(*) FROM MaTable";
  • /// object[,] resultat = this.monOracle.getQueryResult(sQuery);
  • /// this.monOracle.deconnect();
  • /// ...
  • /// }
  • /// </example>
  • public Object[,] getQueryResult(string sQuery)
  • {
  • this.oracleCmd = new OracleCommand(sQuery, this.oracleCnx);
  • this.oracleReader = null;
  • this.oracleReader = this.oracleCmd.ExecuteReader();
  • Object[,] oArrResult;
  • this.iNbRows = 0;
  • this.iNbCols = this.oracleReader.FieldCount;
  • // Initialisation du tableau de retour
  • while (this.oracleReader.Read()) { this.iNbRows++; }
  • oArrResult = new Object[this.iNbRows,iNbCols];
  • // Remplissage du tableau de retour
  • try
  • {
  • this.oracleReader = this.oracleCmd.ExecuteReader();
  • int i = 0;
  • while (this.oracleReader.Read())
  • {
  • for(int j=0; j<this.iNbCols; j++)
  • {
  • oArrResult[i,j] = oracleReader.GetOracleValue(j);
  • }
  • i++;
  • }
  • }
  • catch(OracleException oe)
  • {
  • this.gestionErreur(oe);
  • return null;
  • }
  • finally
  • {
  • this.oracleReader.Close();
  • this.oracleCmd = null;
  • this.oracleReader = null;
  • }
  • return oArrResult;
  • }
  • #endregion
  • #region Lance un ordre SQL de INSERT, UPDATE ou DELETE
  • /// <summary>Lance un ordre SQL de INSERT, UPDATE ou DELETE</summary>
  • /// <param name="sQuery">Requête à exécuter</param>
  • /// <returns>Renvoi true si l'odre SQL s'est déroulé normallement, false sinon</returns>
  • /// <example>
  • /// classOracle monOracle = new classOracle();
  • /// monOracle.setUser("Toto");
  • /// monOracle.setPassword("mdp");
  • /// monOracle.setBase("maBase");
  • ///
  • /// if(this.monObjetOracle.connect())
  • /// {
  • /// string sQuery="DELETE FROM MaTable";
  • /// bool bResultat = this.monOracle.nonQueryOrder(sQuery);
  • /// this.monOracle.deconnect();
  • ///
  • /// if(bResultat)
  • /// {
  • /// ...
  • /// }
  • /// }
  • /// </example>
  • public bool nonQueryOrder(string sQuery)
  • {
  • this.oracleCmd = new OracleCommand(sQuery, this.oracleCnx);
  • try
  • {
  • this.oracleCmd.ExecuteNonQuery();
  • return true;
  • }
  • catch(OracleException OracleEx)
  • {
  • this.gestionErreur(OracleEx);
  • return false;
  • }
  • finally
  • {
  • this.oracleCmd = null;
  • }
  • }
  • #endregion
  • #region Lance une procédure PL/SQL
  • /// <summary>
  • /// Lance une procédure stockée PL/SQL de type procédure
  • /// </summary>
  • /// <param name="sQuery">Procédure stockée de type procédure à exécuter</param>
  • /// <param name="param">Tableau des paramètres</param>
  • /// <returns>vrai si la procédure s'est exécutée correctement, faux sinon</returns>
  • /// <example>
  • /// classOracle monOracle = new classOracle();
  • /// monOracle.setUser("Toto");
  • /// monOracle.setPassword("mdp");
  • /// monOracle.setBase("maBase");
  • ///
  • /// string param1="blabla";
  • /// string param2="blablabla";
  • ///
  • /// string sQuery = "SCHEMA.PACKAGE.MA_PROCEDURE";
  • /// ArrayList param = new ArrayList(2);
  • /// /* En admettant que le premier paramètre de ma procédure stockée MA_PROCEDURE, du package PACKAGE, sous le chéma Oracle SCHEMA, se nomme monPremierParametre (idem pour le deuxième paramètre) */
  • /// param.Add(new string[] {"monPremierParametre",param1});
  • /// param.Add(new string[] {"monDeuxièmeParametre",param2});
  • ///
  • /// if(this.monOracle.connect())
  • /// {
  • /// bool bRetour = this.monOracle.procStockOrder(sQuery,param);
  • /// this.monOracle.deconnect();
  • ///
  • /// if(bRetour)
  • /// {
  • /// ...
  • /// }
  • /// }
  • /// </example>
  • public bool procStockOrder(string sQuery, ArrayList param)
  • {
  • this.oracleCmd = this.oracleCnx.CreateCommand();
  • this.oracleCmd.CommandText = sQuery;
  • this.oracleCmd.CommandType = CommandType.StoredProcedure;
  • foreach(string[] tableau in param)
  • {
  • this.oracleCmd.Parameters.Add(tableau[0],tableau[1]);
  • }
  • try
  • {
  • this.oracleCmd.ExecuteNonQuery();
  • }
  • catch(OracleException OracleEx)
  • {
  • this.gestionErreur(OracleEx);
  • return false;
  • }
  • finally
  • {
  • this.oracleCmd = null;
  • }
  • return true;
  • }
  • #endregion
  • #region Lance une fonction PL/SQL
  • /// <summary>
  • /// Lance une procédure stockée PL/SQL de type fonction
  • /// </summary>
  • /// <param name="sQuery">Procédure stockée de type fonction à exécuter</param>
  • /// <param name="param">Tableau des paramètres</param>
  • /// <param name="sRetour">Intitulé de la valeur de retour</param>
  • /// <param name="iLongueurRetour">Longueur de la variable de retour</param>
  • /// <returns>la chaîne de caractères retournée par la fonction PL/SQL</returns>
  • /// <example>
  • /// classOracle monOracle = new classOracle();
  • /// monOracle.setUser("Toto");
  • /// monOracle.setPassword("mdp");
  • /// monOracle.setBase("maBase");
  • ///
  • /// string param1="blabla";
  • /// string param2="blablabla";
  • ///
  • /// string sQuery = "SCHEMA.PACKAGE.MA_FONCTION";
  • /// ArrayList param = new ArrayList(2);
  • /// /* En admettant que le premier paramètre de ma fonction stockée MA_FONCTION, du package PACKAGE, sous le chéma Oracle SCHEMA, se nomme monPremierParametre (idem pour le deuxième paramètre) */
  • /// param.Add(new string[] {"monPremierParametre",param1});
  • /// param.Add(new string[] {"monDeuxièmeParametre",param2});
  • ///
  • /// if(this.monOracle.connect())
  • /// {
  • /// /* En admettant que le paramètre de retour de ma fonction stockée se nomme monParametreRetour et est de longueur 10 (VARCHAR2(10))*/
  • /// string sRetour = this.monOracle.foncStockOrder(sQuery,param,"monParametreRetour",10);
  • /// this.monOracle.deconnect();
  • ///
  • /// if(sRetour != null)
  • /// {
  • /// ...
  • /// }
  • /// }
  • /// </example>
  • public string foncStockOrder(string sQuery,ArrayList param, string sRetour, int iLongueurRetour)
  • {
  • this.oracleCmd = this.oracleCnx.CreateCommand();
  • this.oracleCmd.CommandText = sQuery;
  • this.oracleCmd.CommandType = CommandType.StoredProcedure;
  • this.oracleCmd.Parameters.Add(sRetour,OracleType.VarChar,iLongueurRetour);
  • this.oracleCmd.Parameters[sRetour].Direction = ParameterDirection.ReturnValue;
  • foreach(string[] tableau in param)
  • {
  • this.oracleCmd.Parameters.Add(tableau[0],tableau[1]);
  • }
  • try
  • {
  • this.oracleCmd.ExecuteNonQuery();
  • return((string)this.oracleCmd.Parameters[sRetour].Value);
  • }
  • catch(OracleException OracleEx)
  • {
  • this.gestionErreur(OracleEx);
  • return null;
  • }
  • finally
  • {
  • this.oracleCmd = null;
  • }
  • }
  • #endregion
  • #region Gestion des erreurs
  • private void gestionErreur(OracleException oe)
  • {
  • switch(oe.Code)
  • {
  • case 02292 :
  • MessageBox.Show("Impossible de supprimer cet élément car il est encore référencé dans une autre table.","Erreur Oracle",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);
  • break;
  • default :
  • MessageBox.Show(oe.Message,"Erreur Oracle",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);
  • break;
  • }
  • }
  • #endregion
  • }
  • }
using System;
using System.Windows.Forms;
using System.Collections;
using System.Data.OracleClient;
using System.Data;

namespace ConnexionOracle
{
	/// <summary>
	/// Classe permettant l'interface avec Oracle
	/// </summary>
	public class classOracle
	{
		#region Variables
		/// <summary>
		/// User Oracle
		/// </summary>
		private string sUser;
		/// <summary>
		/// Mot de passe Oracle
		/// </summary>
		private string sPassword;
		/// <summary>
		/// Nom de la base Oracle
		/// </summary>
		private string sBase;
		/// <summary>
		/// Nombre de lignes du résultat d'une requête
		/// </summary>
		private int iNbRows;
		/// <summary>
		/// Nombre de colonnes du résultat d'une requête
		/// </summary>
		private int iNbCols;
		/// <summary>
		/// Connexion à la base de données Oracle
		/// </summary>
		private OracleConnection oracleCnx;
		/// <summary>
		/// Instruction SQL ou procédure stockée à exécuter
		/// </summary>
		private OracleCommand oracleCmd;
		/// <summary>
		/// Flux de lignes de données stockant le résultat d'une requête
		/// </summary>
		private OracleDataReader oracleReader;
		#endregion

		#region Propriétés
		/// <summary>
		/// Affecte ou récupère le login Oracle
		/// </summary>
		public string User 
		{
			get 
			{
				return this.sUser;
			}

			set
			{
				this.sUser = value;
			}
		}		

		/// <summary>
		/// Affecte ou récupère le mot de passe Oracle
		/// </summary>
		public string Password
		{
			get 
			{
				return this.sPassword;
			}

			set
			{
				this.sPassword = value;
			}
		}	

		/// <summary>
		/// Affecte ou récupère la base Oracle
		/// </summary>
		public string Base
		{
			get 
			{
				return this.sBase;
			}

			set
			{
				this.sBase = value;
			}
		}	
		
		/// <summary>
		/// Récupère le nombre de ligne d'une requête
		/// </summary>
		public int NbRows
		{
			get
			{
				return this.iNbRows;
			}
		}

		/// <summary>
		/// Récupère le nombre de colone d'une requête
		/// </summary>
		public int NbCols
		{
			get
			{
				return this.iNbCols;
			}
		}
		#endregion

		#region Constructeur de la classe classOracle
		/// <summary>Constructeur de la classe</summary>
		public classOracle()
		{
			this.sUser     = "";
			this.sPassword = "";
			this.sBase     = "";

			this.iNbRows = 0;
			this.iNbCols = 0;			

			this.oracleCnx    = new OracleConnection();
			this.oracleCmd    = new OracleCommand();
			this.oracleReader = null;
		}
		#endregion

		#region Connexion à la base de données Oracle
		/// <summary>Lance un ordre de connexion à la base Oracle</summary>
		/// <example>
		/// classOracle  monOracle = new classOracle();
		/// monOracle.setUser("Toto");
		/// monOracle.setPassword("mdp");
		/// monOracle.setBase("maBase");
		/// 
		/// if(this.monObjetOracle.connect())
		/// {
		/// ...
		/// }
		/// </example>
		public bool connect()
		{
			 try
			{
				this.oracleCnx.ConnectionString = "Password=" + this.sPassword + ";User ID=" + this.sUser + ";Data Source=" + this.sBase;

				this.iNbCols = 0;
				this.iNbRows = 0;

				oracleCnx.Open();

				return true;
			}
			catch(Exception)
			{
				MessageBox.Show("Impossible de se connecter à la base de données","Erreur Oracle",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);
				return false;
			}
		}
		#endregion

		#region Déconnexion de la base de données Oracle
		/// <summary>
		/// Lance un ordre de déconnexion de la base de données Oracle
		/// </summary>
		/// <example>
		/// classOracle  monOracle = new classOracle();
		/// ...
		///	this.monOracle.deconnect();
		/// </example>
		public bool deconnect()
		{
			try
			{
				oracleCnx.Close();
				return true;
			}
			catch(Exception ex)
			{
				MessageBox.Show(ex.Message,"Erreur Oracle",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);
				return false;
			}
		}
		#endregion

		#region Récupère les valeurs d'une requête
		/// <summary>Récupère les valeurs d'une requête</summary>
		/// <param name="sQuery">Requête à exécuter</param>
		/// <returns>Renvoi les valeurs de la requête</returns>
		/// <example>
		/// classOracle  monOracle = new classOracle();
		/// monOracle.setUser("Toto");
		/// monOracle.setPassword("mdp");
		/// monOracle.setBase("maBase");
		/// 
		/// if(this.monObjetOracle.connect())
	    /// {
		///		string sQuery="SELECT COUNT(*) FROM MaTable";
		///		object[,] resultat = this.monOracle.getQueryResult(sQuery);
		///		this.monOracle.deconnect();
		///		...
		/// }
		/// </example>
		public Object[,] getQueryResult(string sQuery)
		{
			this.oracleCmd    = new OracleCommand(sQuery, this.oracleCnx);
			this.oracleReader = null;
			this.oracleReader = this.oracleCmd.ExecuteReader();

			Object[,] oArrResult;
			this.iNbRows = 0;
			this.iNbCols = this.oracleReader.FieldCount;

			// Initialisation du tableau de retour
			while (this.oracleReader.Read()) { this.iNbRows++; }
			oArrResult = new Object[this.iNbRows,iNbCols];

			// Remplissage du tableau de retour
			try
			{
				this.oracleReader = this.oracleCmd.ExecuteReader();
				int i = 0;
				while (this.oracleReader.Read())
				{
					for(int j=0; j<this.iNbCols; j++)
					{
						oArrResult[i,j] = oracleReader.GetOracleValue(j);
					}
					i++;
				}
			}
			catch(OracleException oe)
			{
				this.gestionErreur(oe);
				return null;
			}
			finally
			{
				this.oracleReader.Close();
				this.oracleCmd = null;
				this.oracleReader = null;
			}

			return oArrResult;
		}
		#endregion

		#region Lance un ordre SQL de INSERT, UPDATE ou DELETE
		/// <summary>Lance un ordre SQL de INSERT, UPDATE ou DELETE</summary>
		/// <param name="sQuery">Requête à exécuter</param>
		/// <returns>Renvoi true si l'odre SQL s'est déroulé normallement, false sinon</returns>
		/// <example>
		/// classOracle  monOracle = new classOracle();
		/// monOracle.setUser("Toto");
		/// monOracle.setPassword("mdp");
		/// monOracle.setBase("maBase");
		/// 
		/// if(this.monObjetOracle.connect())
		/// {
		///		string sQuery="DELETE FROM MaTable";
		///		bool bResultat = this.monOracle.nonQueryOrder(sQuery);
		///		this.monOracle.deconnect();
		///		
		///		if(bResultat)
		///		{
		///		  ...  
		///		}
		/// }
		/// </example>
		public bool nonQueryOrder(string sQuery)
		{
			this.oracleCmd = new OracleCommand(sQuery, this.oracleCnx);
			try
			{
				this.oracleCmd.ExecuteNonQuery();
				return true;
			}
			catch(OracleException OracleEx)
			{
				this.gestionErreur(OracleEx);
				return false;
			}
			finally
			{
				this.oracleCmd = null;
			}
		}
		#endregion

		#region Lance une procédure PL/SQL
		/// <summary>
		/// Lance une procédure stockée PL/SQL de type procédure
		/// </summary>
		/// <param name="sQuery">Procédure stockée de type procédure à exécuter</param>
		/// <param name="param">Tableau des paramètres</param>
		/// <returns>vrai si la procédure s'est exécutée correctement, faux sinon</returns>
		/// <example>
		/// classOracle  monOracle = new classOracle();
		///	monOracle.setUser("Toto");
		///	monOracle.setPassword("mdp");
		///	monOracle.setBase("maBase");
		///
		///	string param1="blabla";
		///	string param2="blablabla";
		///
		///	string sQuery = "SCHEMA.PACKAGE.MA_PROCEDURE";
		///	ArrayList param = new ArrayList(2);
		///	/* En admettant que le premier paramètre de ma procédure stockée MA_PROCEDURE, du package PACKAGE, sous le chéma Oracle SCHEMA, se nomme monPremierParametre (idem pour le deuxième paramètre) */
		///	param.Add(new string[] {"monPremierParametre",param1});
		///	param.Add(new string[] {"monDeuxièmeParametre",param2});				
		///
		/// if(this.monOracle.connect())
		/// {
		///		bool bRetour =  this.monOracle.procStockOrder(sQuery,param);
		///		this.monOracle.deconnect();
		///
		///		if(bRetour)
		///		{
		///			...
		///		}
		///	}
		/// </example>
		public bool procStockOrder(string sQuery, ArrayList param)
		{
			this.oracleCmd = this.oracleCnx.CreateCommand();
			this.oracleCmd.CommandText = sQuery;
			this.oracleCmd.CommandType = CommandType.StoredProcedure;

			foreach(string[] tableau in param)
			{
				this.oracleCmd.Parameters.Add(tableau[0],tableau[1]);
			}

			try
			{
				this.oracleCmd.ExecuteNonQuery();
			}
			catch(OracleException OracleEx)
			{
				this.gestionErreur(OracleEx);
				return false;
			}
			finally
			{
				this.oracleCmd = null;
			}

			return true;
		}
		#endregion

		#region Lance une fonction PL/SQL
		/// <summary>
		/// Lance une procédure stockée PL/SQL de type fonction
		/// </summary>
		/// <param name="sQuery">Procédure stockée de type fonction à exécuter</param>
		/// <param name="param">Tableau des paramètres</param>
		/// <param name="sRetour">Intitulé de la valeur de retour</param>
		/// <param name="iLongueurRetour">Longueur de la variable de retour</param>
		/// <returns>la chaîne de caractères retournée par la fonction PL/SQL</returns>
		/// <example>
		/// classOracle  monOracle = new classOracle();
		///	monOracle.setUser("Toto");
		///	monOracle.setPassword("mdp");
		///	monOracle.setBase("maBase");
		///
		///	string param1="blabla";
		///	string param2="blablabla";
		///
		///	string sQuery = "SCHEMA.PACKAGE.MA_FONCTION";
		///	ArrayList param = new ArrayList(2);
		///	/* En admettant que le premier paramètre de ma fonction stockée MA_FONCTION, du package PACKAGE, sous le chéma Oracle SCHEMA, se nomme monPremierParametre (idem pour le deuxième paramètre) */
		///	param.Add(new string[] {"monPremierParametre",param1});
		///	param.Add(new string[] {"monDeuxièmeParametre",param2});				
		///
		/// if(this.monOracle.connect())
		/// {
		///		/* En admettant que le paramètre de retour de ma fonction stockée se nomme monParametreRetour et est de longueur 10 (VARCHAR2(10))*/
		///		string sRetour =  this.monOracle.foncStockOrder(sQuery,param,"monParametreRetour",10);
		///		this.monOracle.deconnect();
		///
		///		if(sRetour != null)
		///		{
		///			...
		///		}
		///	}
		/// </example>
		public string foncStockOrder(string sQuery,ArrayList param, string sRetour, int iLongueurRetour)
		{
			this.oracleCmd = this.oracleCnx.CreateCommand();
			this.oracleCmd.CommandText = sQuery;
			this.oracleCmd.CommandType = CommandType.StoredProcedure;
			this.oracleCmd.Parameters.Add(sRetour,OracleType.VarChar,iLongueurRetour);
			this.oracleCmd.Parameters[sRetour].Direction = ParameterDirection.ReturnValue;

			foreach(string[] tableau in param)
			{
				this.oracleCmd.Parameters.Add(tableau[0],tableau[1]);
			}

			try
			{
				this.oracleCmd.ExecuteNonQuery();
				return((string)this.oracleCmd.Parameters[sRetour].Value);
			}
			catch(OracleException OracleEx)
			{
				this.gestionErreur(OracleEx);
				return null;
			}
			finally
			{
				this.oracleCmd = null;
			}
		}
		#endregion

		#region Gestion des erreurs
		private void gestionErreur(OracleException oe)
		{
			switch(oe.Code)
			{
				case 02292 :
					MessageBox.Show("Impossible de supprimer cet élément car il est encore référencé dans une autre table.","Erreur Oracle",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);
					break;

				default :
					MessageBox.Show(oe.Message,"Erreur Oracle",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);
					break;
			}
		}
		#endregion
	}
}

 Conclusion

Exemple d'utilisation pour une requête simple :
classOracle  monOracle = new classOracle();
monOracle.setUser("Toto");
monOracl e.setPassword("mdp");
monOracle.setBase("maBase");

if(this.monObjetOracle.connect())
{
  string sQuery="SELECT MonChamp FROM MaTable";

  object[,] resultat = this.monOracle.getQueryResult(sQuery);

  this.monOracle.deconnect();

// Utilisation pour remplir un combobox par exemple avec MonChamp
  foreach(object[] monRow in resultat)
  {
    this.cbMonComboBox.Items.Add(monRow[0].ToString()) ;
  }
}

Exemple d'utilisation pour une procédure stockée :
classOracle  monOracle = new classOracle();
monOracle.setUser("Toto");
monOracl e.setPassword("mdp");
monOracle.setBase("maBase");

String param1="blabla";
String param2="blablabla";

string sQuery = "SCHEMA.PACKAGE.MA_PROCEDURE";
ArrayList param = new ArrayList(2);
/* En admettant que le premier paramètre de ma procédure stockée MA_PROCEDURE, du package PACKAGE, sous le chéma Oracle SCHEMA, se nomme monPremierParametre (idem pour le deuxième paramètre) */
param.Add(new string[] {"monPremierParametre",param1});
param.Add(new string[] {"monDeuxièmeParametre",param2});

if(this.mon Oracle.connect())
{
  bool bRetour =  this.monOracle.procStockOrder(sQuery,param);
  this.monOracle.deconnect();

  if(bRetour)
  {
    ...
  }
}

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

09 mai 2005 10:12:25 :
MAJ pour remplacer les GET et les SET par des propriétés. Ajout des exemples pour chaque fonction.
04 février 2008 10:06:18 :
Ajout d'un exemple d'utilisation

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) DEMO_XML_BASE_DE_DONNÉES par DanMor498
Source avec Zip Source avec une capture Source .NET (Dotnet) EXPORTER SCRIPT SQL SQL SERVER (CREATE - DROP - INSERT - TAB... par citt
Source avec Zip Source .NET (Dotnet) BULKINSERT EN C# par Malkuth
Source avec Zip Source avec une capture Source .NET (Dotnet) SPLIT SQL SANS TABLE TEMPORAIRE par TheOnlyMaX
Source avec Zip Source .NET (Dotnet) MOTEUR CSV ET RECORDSET PERSO par SwitchApocalyps

 Sources en rapport avec celle ci

Source .NET (Dotnet) TRANSACTIONS ORACLE SQL SERVER CSV AVEC C# par maher_iag_2004
Source avec Zip Source .NET (Dotnet) WIFU, CONNEXION RÉSEAU WIFI par thebigboss3
Source avec Zip Source .NET (Dotnet) CONNEXION BDD ACCESS EN MODE DÉCONNECTÉ par mohican13
Source .NET (Dotnet) COMPOSANT PEMETTANT DE GÉRER LA CONNEXION À UNE BASE DE DONN... par Godzidane
Source .NET (Dotnet) CONNEXION DE TYPE TCP/IP par pornik

Commentaires et avis

Commentaire de ousta le 26/08/2004 16:20:22

Beau travail je naurais qu 'une phrase a rajouter vive sqlserver ^^

Commentaire de shervy le 31/08/2004 09:05:36

Franchement beau travail mec...
Enfin une source qui va permettre d'utiliser autre chose que SQLserver !!!
Continue comme çà...

Commentaire de shervy le 31/08/2004 09:23:57

Bizarre, il me semblait être connecter avant de poster la news précédente ?!?

Commentaire de JuS le 31/08/2004 09:25:27

Oracle.Net n'est pas obligatoire si vous avez installé Visual Studio 2003 et le framework 1.1 !

Merci pour tous ces encouragements ...

Commentaire de Lamb le 24/01/2005 20:15:08

onjour,

je viens de découvrir cette petite classe qui m'a l'air bien pratique. Le problème, c'est qu'il s'agit de C#. Quelqu'un aurait une idée de comment la faire fonctionner en C++ ?

Quelles adaptations faudrait il faire ? Auriez vous quelques pistes ou sources à m'indiquer ?

Merci par avance !

Commentaire de sphaxslayer le 26/04/2005 14:49:19

Excellente, ça m'a beaucoup aidé! c'est très clair et parfaitement commenté, le code est aéré donc bien lisible...nickel! :)
merci encore

Commentaire de TheSaib le 06/06/2005 23:26:07 administrateur CS

Je félicite les commentaires de codes :)

Cela devient rare de nos jours !

Commentaire de JuS le 07/06/2005 09:11:11

Deux félicitations d'un coup, ma foi je n'en mérite pas tant ! :o)

Merci en tout cas !

Commentaire de TheSaib le 07/06/2005 11:04:04 administrateur CS

J'en ai enlevé une :)

Commentaire de red_rocks le 04/02/2006 13:10:21

Salut! Je rejoins LAMB pour savoir si quelqu'un aurait une idée pour faire fonctionner ce code en C++??
Merci d'avance !

Commentaire de Likilik le 22/04/2006 04:17:34

Ce code est clair et bien fait !
Par contre je rencontre un petit problème lors de l'exécution d'une procédure stockée avec paramètres.
Il me renvoie un message : la procédure doit être déclarée.
Or la procédure est présente lorsque je consulte le contenu de la base avec l'explorateur de serveur de VS 2003.
Une idée ?
Je sais que ca reste floue mais si ca interesse j'envoie la portion de code que j'ai tapé.
Merci

Commentaire de shervy le 24/04/2006 08:53:24

Cela ressemeble fort à un problème de droits...
Es-tu sûr que le user à les droits d'exécution sur ta procédure ? Car le fait de la voir n'est pas suffisant.

Commentaire de shervy le 24/04/2006 08:55:23

Autre remarque, la compilation avec C# Express fonctionne parfaitement. Il y a juste deux avertissements mais rien de bien méchant à corriger.
Vraiment un code parfait :))

Commentaire de Likilik le 24/04/2006 12:56:43

J'ai regardé, en effet le code erreur renvoyé par Oracle est PLS-00201 qui est effectivement un problème de droits d'utilisateur à priori.
Je regarde et je vous tiens informé.
Merci encore.

Commentaire de JuLsupinfo le 03/07/2007 14:10:49

Salut, belle classe en effet, mais quelqu'un pourrait-il me dire comment faire pour se connecter à une base Oracle sur un serveur distant ? Car nul part tu n'indique d'adresse de serveur ou de nom de serveur, juste la base et login + pass.
Merci d'avance.

Commentaire de shervy le 03/07/2007 16:26:24

Une didée qui me vient comme çà... sans aucune garantie !!!
Essaye de remplacer :

this.oracleCnx.ConnectionString = "Password=" + this.sPassword + ";User ID=" + this.sUser + ";Data Source=" + this.sBase;

par :

sServeur = "MonServeur";
this.oracleCnx.ConnectionString = "Password=" + this.sPassword + ";User ID=" + this.sUser + ";Data Source=" + this.sBase + ";Server=" + sServeur;

Commentaire de jonathanC le 04/02/2008 09:51:39

Bonjour,

je ne souhaite utiliser que la partie " select ",et j'aurais 2 questions:
- où est-ce que l'ont ecrit la requête SQL?
- comment utilise-t-on le résultat avec l'objet retourné?

Commentaire de JuS le 04/02/2008 09:57:41

Tu fais dans ce style là :

classOracle monOracle = new classOracle();
monOracle.setUser("Toto");
monOracle.setPassword("mdp");
monOracle.setBase("maBase");

if(this.monObjetOracle.connect())
{
  string sQuery="SELECT MonChamp FROM MaTable";
  object[,] resultat = this.monOracle.getQueryResult(sQuery);
  this.monOracle.deconnect();

  // Utilisation pour remplir un combobox par exemple avec MonChamp
  foreach(object[] monRow in resultat)
  {
    this.cbMonComboBox.Items.Add(monRow[0].ToString());
  }
}

Commentaire de jonathanC le 04/02/2008 10:14:12

hm ouai j'ai vu ce code, il est en commentaire dans l'exemple, ce que je comprend pas c'est que dans le code on renseigne déja l'user, le passwd et la base, mais pas la requête SQL, c'est pour cela que je ne comprend pas :s

Commentaire de JuS le 04/02/2008 10:17:50

La variable sQuery contient ta requête SQL, qui est passée à ton objet Oracle via la fonction getQueryResult et le résultat de ta requête se trouve dans la variable resultat.

Commentaire de jonathanC le 04/02/2008 10:40:16

ok merci :)
et dans ce code :
while (this.oracleReader.Read())
                    {
                        for (int j = 0; j < this.iNbCols; j++)
                        {
                            oArrResult[i, j] = oracleReader.GetOracleValue(j);
                        }
                        i++;
                    }
on stocke le résultat de notre requete dans notre objet oArrResult, mais comment peut-on utiliser cette objet ensuite?

Commentaire de JuS le 04/02/2008 10:47:16

C'est un tableau à deux dimensions.
Chaque row de ta requête est un tableau et l'ensemble est stocké dans un tableau.

Donc tu peux récupérer tes lignes de cette façon par exemple :
foreach(object[] monRow in resultat)
{
  this.cbMonComboBox.Items.Add(monRow[0].ToString());
}

resultat correspond ici à oArrResult, c'est ton tableau à deux dimensions. Pour chaque tableau (row) de ton résultat, tu récupère le champ que tu veux.
Par exemple si tu veux récupérer le 1er champ de ton SELECT ça sera monRow[0], qui sera de type object donc n'oublie pas de le transformer en string par exmple avec ToString()

Commentaire de jonathanC le 04/02/2008 11:14:04

Hm je suis un peu perdu :s
#############
C'est un tableau à deux dimensions.Chaque row de ta requête est un tableau et l'ensemble est stocké dans un tableau.
#############

ça je suis daccord :)

apres la récupération du résultat j y arrive pas..

Commentaire de Greyhunter le 15/06/2009 14:09:04

excellent classe! j'ai juste un pb avec la récupération de données!

en fait j'ai justement besoin d'insérer mes rows dans un textbox, donc je parcours résultat avec un foreach (comme dans ton exemple avec object[] monRow) et je chope une exception.

[code]
foreach (Object[] monRow in resultat)
                {
                    traitement.Text += monRow[0].ToString() + " - " + monRow[1].ToString() + " - " + monRow[2].ToString() + " - " + monRow[3].ToString() + " - " + monRow[4].ToString() + "\r\n\r\n";
                }
[/code]

l'excepetion est la suivante:
Impossible d'effectuer un cast d'un objet de type 'System.Data.OracleClient.OracleNumber' en type 'System.Object[]'.

aurais-tu une suggestion?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

connection a une db oracle [ par ch3ass ] j'arrive pas a me connecter a une base de donnée orale ? Connection sécurisé [ par tobleronne ] Bonjour à tous,J'essaye tout betement de faire un accés à la base mais on me dit : "Échec de la connexion de l'utilisateur 'sa'. Raison : Non associé Connexion ORACLE...Trop de mal! :(:(:( [ par sphaxslayer ] Salut, en fait je refais un post car mon pr&#233;c&#233;dent n'&#233;tait pas/plus tr&#232;s clair...voil&#224; le lien vers le premier: http://www.cs connection par OLE DB [ par molok ] j ai lu que l'on peut faire des acces a des fiches de calcul excel avec ole db mais je ne c pas quel provider il faut utiliser pour la connection si q Chaine de connexion [ par jtccicd ] Salut,Comment acceder &#224; une base oracle (chaine de connexion) pour oracle avec C# ?JTCCICD C# et connexion à Oracle7 [ par rouxxx ] Bonjour à tous, J'aurai aimé avoir qqs précisions et ce de manière relativement urgente :p Je cherche à connecter une application C# à une base de d connexion oracle [ par haccounsoft ] Dslé de poluer le forum avec mes questions de debutants mais la encore g un ptit prob .J'aimerai utiliser une base données de TYPE ORACLE pr assurer l fermer une connexion odbc [ par engelho ] Salut tout le monde...J'utilise un odbcConnection ainsi que :&nbsp;&nbsp;&nbsp;- un odbcCommand pour une premi&#232;re requete&nbsp;&nbsp;&nbsp;- un o ODBC, OleDb, ... (°_°)agheu??? + Pb connexion BD Oracle... [ par sphaxslayer ] Bonjour tout le monde...au risque de para&#238;tre stupide, je voudrais vous poser la question suivante:mais que sont ODBC et OleDb ... ? Ormis que ce connection à myql esyphp en C# [ par patou1007 ] Bonjour,J'ai install&#233; easy php et j'ai cr&#233;er une base de don&#233;es mysql avc phpadmin.Je travaille avec visual studio 2005 et je souhaiter


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales