2012-01-27 18 views
2

私はC#+ SQLサーバーデータベース開発者です。C#とストアドプロシージャを呼び出すOracle 10gデータベース

私はデータベースとしてOracleを使用しています。私は1つのOracleストアドプロシージャrefカーソルを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でrefカーソルのデータ型のオプションを取得していません。

+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

関連する問題