Вызов хранимой процедуры Oracle из C #?

Я только начал читать о хранимых процедурах. Может ли кто-нибудь помочь мне вызвать хранимую процедуру в oracle с C #?

Посетите этот сайт ODP, созданный oracle для разработчиков Microsoft OracleClient: http://www.oracle.com/technetwork/topics/dotnet/index-085703.html

Также ниже приведен пример кода, который может заставить вас начать вызов хранимой процедуры из C # в Oracle. PKG_COLLECTION.CSP_COLLECTION_HDR_SELECT – это хранимая процедура, построенная на Oracle, принимающая параметры PUNIT, POFFICE, PRECEIPT_NBR и возвращающая результат в 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; } } 

Теперь у меня есть необходимые шаги для вызова процедуры из 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); 

Надеюсь это поможет

Это в основном тот же механизм, что и для команды без запроса:

  • command.CommandText = имя хранимой процедуры
  • command.CommandType = CommandType.StoredProcedure
  • Как и многие вызовы command.Parameters.Add в качестве количества параметров, требуемых sp
  • command.ExecuteNonQuery

Есть много примеров, первый из которых был возвращен Google – это

Также есть небольшая ловушка, в которую вы можете попасть, если ваш SP является функцией, параметр возвращаемого значения должен быть первым в коллекции параметров

Этот код хорошо работает для меня, чтобы вызвать процедуру хранения oracleа

Добавьте ссылки, щелкнув правой кнопкой мыши на имени вашего проекта в обозревателе решений> Добавить ссылку> .Net затем Добавить пространства имен.

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

затем вставьте этот код в обработчик событий

  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(); 

И его Done … Счастливое кодирование с C #

В .Net через версию 4 это можно сделать так же, как и для SQL Server Stored Procs, но обратите внимание, что вам нужно:

 using System.Data.OracleClient; 

Здесь есть некоторые системные требования, которые вы должны проверить в своем сценарии.

Microsoft осуждает это пространство имен с .Net 4, поэтому сторонние провайдеры будут необходимы в будущем. Имея это в виду, вам может быть лучше использовать Oracle Data Provider для .Net (ODP.NET) из слова go – у этого есть оптимизации, которых нет в classах Microsoft. Существуют и другие сторонние варианты, но у Oracle есть большой интерес к тому, чтобы поддерживать разработчиков .NET на борту, чтобы их было хорошо.

Соединение с Oracle уродливо. Вот несколько чистых с использованием. Многие другие образцы не вызывают методы IDisposable для объектов, которые они создают.

  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(); } 
  • LINQ-to-SQL и хранимые процедуры?
  • Как вызвать хранимые процедуры с помощью EntityFramework?
  • Как создать хранимую процедуру в MS Access?
  • Есть ли способ вызвать хранимую процедуру с помощью Dapper?
  • Недопустимое сочетание сортировок (utf8_unicode_ci, IMPLICIT) и (utf8_general_ci, IMPLICIT) для операции '='
  • Как написать SP в phpMyAdmin (MySQL)?
  • MySQL хранимой процедуры против функции, которую я буду использовать, когда?
  • Извлечение типа таблицы Oracle из хранимой процедуры с использованием JDBC
  • Значение параметра таблицы хранимых процедур Entity Framework
  • Добавление сложных типов хранимых процедур в Entity Framework
  • Захват хранимой процедуры печати вывода в .NET.
  • Давайте будем гением компьютера.