C#에서 Oracle 스토어드 프로시저를 호출하시겠습니까?
C#에서 Oracle에 저장된 프로시저를 호출하려면 어떻게 해야 합니까?
Microsoft OracleClient Developers용으로 Oracle에서 설정한 ODP 사이트(http://www.oracle.com/technetwork/topics/dotnet/index-085703.html를 방문하십시오.
또한 아래는 저장 프로시저를 C#에서 Oracle로 호출하기 위한 샘플 코드입니다.PKG_COLLECTIONCSP_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);
도움이 되었으면 좋겠다
기본적으로 다음과 같은 비쿼리 명령어와 동일한 메커니즘입니다.
- 명령어를 입력합니다.CommandText = 저장 프로시저의 이름
- 명령어를 입력합니다.명령 유형 =
CommandType.StoredProcedure
- 명령 호출 수만큼.파라미터SP에 필요한 매개 변수 수로 추가
- 명령어를 입력합니다.Execute Non Query(쿼리 없음 실행)
많은 예가 있는데, 구글에 의해 처음 반환된 것은 이것입니다.
또한 빠질 수 있는 작은 함수도 있습니다. SP가 함수인 경우 반환값 매개 변수는 매개 변수 집합의 첫 번째여야 합니다.
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();
}
이 코드는 Oracle 스토어드 프로시저를 호출하는 데 적합합니다.
솔루션 탐색기 > 참조 추가 > 프로젝트 이름을 오른쪽 클릭하여 참조를 추가합니다.[Net] [Add 네임스페이스]를 선택합니다.
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();
그리고 완료...C#을 사용한 해피 코딩
.Net에서 버전4까지는 SQL Server Stored Procs와 같은 방법으로 실행할 수 있지만 다음 사항이 필요합니다.
using System.Data.OracleClient;
시나리오에서 정상인지 확인해야 하는 시스템 요건이 몇 가지 있습니다.
Microsoft는 현재 이 네임스페이스를 폐지하고 있습니다.넷4는 향후 서드파티 프로바이더가 필요합니다.이 점을 염두에 두고 Oracle Data Provider for 를 사용하는 것이 좋을 수 있습니다.넷(ODP)NET)라는 단어에서 시작 - Microsoft 클래스에 없는 최적화 기능을 제공합니다.다른 서드파티 옵션도 있지만 Oracle은 유지에 강한 관심을 가지고 있습니다.인터넷 개발자들이 참여했으니 그들의 개발자들은 좋을 것이다.
대신
cmd = new OracleCommand("ProcName", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("ParName", OracleDbType.Varchar2, ParameterDirection.Input).Value = "foo";
다음 구문을 사용할 수도 있습니다.
cmd = new OracleCommand("BEGIN ProcName(:p0); END;", con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("ParName", OracleDbType.Varchar2, ParameterDirection.Input).Value = "foo";
를 는, 다음과 같이 해 주세요.cmd.BindByName = False
(기본값) 명령 문자열에 기술된 것과 동일한 순서로 파라미터를 추가해야 합니다.이치노★★★의 cmd.BindByName = True
이치노순서는 상관없습니다.
함수를 호출하는 경우 명령 문자열은 다음과 같습니다.
cmd = new OracleCommand("BEGIN :ret := ProcName(:ParName); END;", con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("ret", OracleDbType.RefCursor, ParameterDirection.ReturnValue);
cmd.Parameters.Add("ParName", OracleDbType.Varchar2, ParameterDirection.Input).Value = "foo";
// cmd.ExecuteNonQuery(); is not needed, otherwise the function is executed twice!
var da = new OracleDataAdapter(cmd);
da.Fill(dt);
아래는 에서 작업했습니다.NET Core 솔루션Oracle DataReader 및 Oracle 명령어를 사용합니다.유형은 CommandType입니다.본문
using Oracle.ManagedDataAccess.Client;
.......
string spSql = "BEGIN STORED_PROC_NAME(:IN_PARAM, :OUT_PARAM1, :OUT_PARAM2); END; ";
using (OracleConnection oraCnn = new OracleConnection(cnnString))
using (OracleCommand oraCommand = new OracleCommand(spSql, oraCnn))
{
await oraCnn.OpenAsync(cancellationToken);
oraCommand.CommandType = CommandType.Text;
oraCommand.BindByName = true;
oraCommand.Parameters.Add("IN_PARAM", OracleDbType.Long, ParameterDirection.Input).Value = 123;
oraCommand.Parameters.Add("OUT_PARAM1", OracleDbType.Int32, null, ParameterDirection.Output);
oraCommand.Parameters.Add("OUT_PARAM2", OracleDbType.Varchar2, 4000, null, ParameterDirection.Output);
OracleDataReader objReader = oraCommand.ExecuteReader();
string outParamValue= oraCommand.Parameters["OUT_PARAM2"].Value.ToString();
}
언급URL : https://stackoverflow.com/questions/3940587/calling-oracle-stored-procedure-from-c
'programing' 카테고리의 다른 글
연결 및 라우터 문제 (0) | 2023.04.02 |
---|---|
Scala 2.10 + Json 시리얼화 및 디시리얼화 (0) | 2023.04.02 |
JSON과 Objective-C를 해석하려면 어떻게 해야 하나요? (0) | 2023.04.02 |
GridFS는 실전 가동에 충분한 속도와 신뢰성을 갖추고 있습니까? (0) | 2023.04.02 |
React TypeScript HoC - 컴포넌트를 프로펠러로 전달 (0) | 2023.04.02 |