Appel de procédure Oracle stockée à partir de C#?

je viens de commencer à lire sur les procédures stockées. Est-ce que quelqu'un peut s'il vous plaît m'aider à appeler une procédure stockée dans oracle à partir de C#?

22
demandé sur user2864740 2010-10-15 12:22:31

6 réponses

S'il vous plaît visitez ce site ODP mis en place par oracle pour Microsoft Oracleclient développeurs: http://www.oracle.com/technetwork/topics/dotnet/index-085703.html

Vous trouverez également ci-dessous un exemple de code qui peut vous permettre de commencer à appeler une procédure stockée de C# à Oracle. PKG_COLLECTION.CSP_COLLECTION_HDR_SELECT est la procédure stockée construite sur Oracle acceptant les paramètres PUNIT, POFFICE, PRECEIPT_NBR et retournant le résultat dans T_CURSOR.

using Oracle.DataAccess;
using Oracle.DataAccess.Client;

public DataTable GetHeader_BySproc(string unit, string office, string receiptno)
{
    using (OracleConnection cn = new OracleConnection(DatabaseHelper.GetConnectionString()))
    {
        OracleDataAdapter da = new OracleDataAdapter();
        OracleCommand cmd = new OracleCommand();
        cmd.Connection = cn;
        cmd.InitialLONGFetchSize = 1000;
        cmd.CommandText = DatabaseHelper.GetDBOwner() + "PKG_COLLECTION.CSP_COLLECTION_HDR_SELECT";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("PUNIT", OracleDbType.Char).Value = unit;
        cmd.Parameters.Add("POFFICE", OracleDbType.Char).Value = office;
        cmd.Parameters.Add("PRECEIPT_NBR", OracleDbType.Int32).Value = receiptno;
        cmd.Parameters.Add("T_CURSOR", OracleDbType.RefCursor).Direction = ParameterDirection.Output;

        da.SelectCommand = cmd;
        DataTable dt = new DataTable();
        da.Fill(dt);
        return dt;
    }
}
30
répondu hyperkittie 2016-03-14 20:48:27

j'ai maintenant les étapes nécessaires pour appeler la procédure de C#

   //GIVE PROCEDURE NAME
   cmd = new OracleCommand("PROCEDURE_NAME", con);
   cmd.CommandType = CommandType.StoredProcedure;

   //ASSIGN PARAMETERS TO BE PASSED
   cmd.Parameters.Add("PARAM1",OracleDbType.Varchar2).Value = VAL1;
   cmd.Parameters.Add("PARAM2",OracleDbType.Varchar2).Value = VAL2;

   //THIS PARAMETER MAY BE USED TO RETURN RESULT OF PROCEDURE CALL
   cmd.Parameters.Add("vSUCCESS", OracleDbType.Varchar2, 1);
   cmd.Parameters["vSUCCESS"].Direction = ParameterDirection.Output;

   //USE THIS PARAMETER CASE CURSOR IS RETURNED FROM PROCEDURE
   cmd.Parameters.Add("vCHASSIS_RESULT",OracleDbType.RefCursor,ParameterDirection.InputOutput); 

   //CALL PROCEDURE
   con.Open();
   OracleDataAdapter da = new OracleDataAdapter(cmd);
   cmd.ExecuteNonQuery();

   //RETURN VALUE
   if (cmd.Parameters["vSUCCESS"].Value.ToString().Equals("T"))
   {
      //YOUR CODE
   }
   //OR
   //IN CASE CURSOR IS TO BE USED, STORE IT IN DATATABLE
   con.Open();
   OracleDataAdapter da = new OracleDataAdapter(cmd);
   da.Fill(dt);

Espérons que cette aide

15
répondu Rohan 2015-08-24 15:12:23

c'est essentiellement le même mécanisme que pour une commande non query avec:

  • la commande.CommandText = le nom du procédure stockée
  • la commande.CommandType = CommandType.StoredProcedure
  • autant d'appels au commandement.Paramètre.Ajouter le nombre de paramètres de la sp il faut
  • la commande.Exécutenonquery

Il y a beaucoup d'exemples, le premier retournés par Google celui-ci

Il y a aussi un petit piège dans lequel vous pourriez tomber, si votre SP est une fonction, votre paramètre de valeur de retour doit être en premier dans la collection de paramètres

5
répondu vc 74 2010-10-15 08:32:39

ce Code fonctionne bien pour moi appelant procédure stockée oracle

ajouter des références en cliquant avec le bouton droit de la souris sur le nom de votre projet dans solution explorer >ajouter une référence >.Net puis Ajouter des espaces de noms.

using System.Data.OracleClient;
using System.Data;

puis coller ce code dans le Handler d'événement

        string str = "User ID=username;Password=password;Data Source=Test";
        OracleConnection conn = new OracleConnection(str);
        OracleCommand cmd = new OracleCommand("stored_procedure_name", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        --Ad parameter list--
        cmd.Parameters.Add("parameter_name", "varchar2").Value = value;
        ....
        conn.Open();
        cmd.ExecuteNonQuery();

Et de son Fait...Heureux codage avec C#

4
répondu Abdul 2013-07-09 06:18:45

.Net grâce à la version 4 ce qui peut être fait de la même manière que pour SQL Server Stockées Procs, mais notez que vous avez besoin de:

using System.Data.OracleClient;

Il y a certaines exigences en matière de système ici que vous devriez vérifier sont OK dans votre scénario.

Microsoft est déprécier cet espace de noms à partir de .Net 4 donc, fournisseurs tiers seront nécessaires dans l'avenir. Avec ceci à l'Esprit, vous pourriez être mieux d'utiliser Oracle Data Provider for .Net (ODP.NET) du début à la fin - il y a des optimisations qui ne sont pas dans les classes Microsoft. Il existe d'autres options pour les tiers, mais Oracle a tout intérêt à garder les développeurs .Net à bord, de sorte que les leurs devraient être bons.

2
répondu Steve Townsend 2010-10-15 10:13:39

Se connecter à Oracle est moche. Voici un peu de nettoyant avec l'utilisation. Beaucoup d'autres exemples n'appellent pas les méthodes IDisposable sur les objets qu'ils créent.

using (OracleConnection connection = new OracleConnection("ConnectionString"))
    using (OracleCommand command = new OracleCommand("ProcName", connection))             
    {
          command.CommandType = CommandType.StoredProcedure;
          command.Parameters.Add("ParameterName", OracleDbType.Varchar2).Value = "Your Data Here";
          command.Parameters.Add("SomeOutVar", OracleDbType.Varchar2, 120);
          command.Parameters["return_out"].Direction = ParameterDirection.Output;
          command.Parameters.Add("SomeOutVar1", OracleDbType.Varchar2, 120);
          command.Parameters["return_out2"].Direction = ParameterDirection.Output;
          connection.Open();
          command.ExecuteNonQuery();
          string SomeOutVar = command.Parameters["SomeOutVar"].Value.ToString();
          string SomeOutVar1 = command.Parameters["SomeOutVar1"].Value.ToString();
    }
0
répondu Robert Stokes 2018-10-03 12:45:35