2012-01-27 4 views
2

저는 C# + SQL 서버 데이터베이스 개발자입니다.저장 프로 시저를 호출하는 C# 및 Oracle 10g 데이터베이스

이제 Oracle을 데이터베이스로 사용하고 있습니다. 하나의 오라클 저장 프로 시저를 참조 커서를 retuning있다.

OLEDB는 어떻게 데이터 세트에서 결과이 저장 프로 시저에 액세스하고 저장할 수 있습니다 사용
CREATE OR REPLACE PROCEDURE Get_Trans_Data (p_return_cur OUT SYS_REFCURSOR) 
IS 

BEGIN 
    OPEN p_return_cur FOR 
    select * from test_tbl1 ; 
END Get_Trans_Data; 

?

Oledb에서 참조 커서 데이터 유형에 대한 옵션을 얻지 못했습니다.

+3

OleDB를 사용하여 Oracle에 연결하는 이유는 무엇입니까? 제안 된 방법은 Oracle 제공 .NET 데이터 공급자 ODP.NET을 사용하는 것입니다. http://www.oracle.com/technetwork/topics/dotnet/index-085163.html –

+0

.net 프레임 워크 3.5를 프로덕션 시스템에 설치했습니다. 기계 클라이언트의로드 및 비즈니스가 다른 소프트웨어를 설치하도록 제한한다는 것을 고려하면 ... ODP.NET을 사용할 수있는 권한이 없습니다. – Prashant

+0

참고로, "C# .NET"과 같은 것은 없습니다. 언어의 이름은 "C#"입니다. –

답변

2

다음과 같이 시도해 볼 수 있습니다. OUT에 대한 매개 변수를 추가 할 필요가 없습니다. 자세히보기 here

static void Read() 
{ 
    using (var currentConnection = new OleDbConnection(
     "provider=MSDAORA;Data Source=orcl;User ID=db_test;Password=db_test;")) 
    { 

     currentConnection.Open(); 
     using (var myCommand = new OleDbCommand()) 
     { 
      myCommand.Connection = currentConnection; 
      myCommand.CommandType = CommandType.StoredProcedure; 
      myCommand.CommandText = "Get_Data"; 

      myCommand.Parameters.Add(
       new OleDbParameter(
        "firstParam", 
        OleDbType.Integer, 0, ParameterDirection.Input, 
        true, 0, 0, "", DataRowVersion.Default, Convert.DBNull)); 

      myCommand.Parameters[0].Value = 42; 

      var myDataReader = myCommand.ExecuteReader(); 
      while (myDataReader.Read()) 
       for (int i = 0; i < myDataReader.FieldCount; i++) 
        Console.WriteLine(myDataReader.GetName(i)); 
     } 
    } 
} 

CREATE OR REPLACE PROCEDURE Get_Data (
    p_return_cur OUT SYS_REFCURSOR, 
    firstParam INTEGER) 
IS 
BEGIN 
    OPEN p_return_cur FOR select * from test; 
END Get_Data; 
+0

감사합니다 Radik .. 이것은 나를 위해 일합니다! – Prashant

관련 문제