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#?
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;
}
}
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
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
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#
.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.
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();
}