2012-01-27 101 views
2

我是C#+ SQL服务器数据库开发人员。C#和Oracle 10g数据库调用存储过程

现在我正在使用Oracle作为数据库。我有一个Oracle存储过程重新调用游标。


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我怎么能访问该存储过程,并保存导致数据集?

我没有得到Oledb中ref cursor数据类型的选项。

+3

你为什么使用OleDB连接到Oracle?建议的方式是使用Oracle提供的.NET数据提供程序ODP.NET http://www.oracle.com/technetwork/topics/dotnet/index-085163.html – 2012-01-27 13:10:08

+0

我在生产机器上安装了.net framework 3.5。考虑到机器客户端的负载和业务限制安装任何其他软件...所以我没有权限使用ODP.NET。 – Prashant 2012-01-27 14:02:40

+0

仅供参考,没有“C#.NET”这样的东西。该语言被命名为“C#”。 – 2012-01-27 20:22:58

回答

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 2012-01-30 08:05:58