我在ORACLE的SYSTEM用户下建立了一个存储过程的包pkg_test,里面有个函数fun_test.我想调用这个函数,也就是system.pkg_test.fun_test这个函数。该函数有一个参数, varchar类型的返回一个number 的值。
  我的代码如下。
OracleConnection conn = new OracleConnection (source);
OracleCommand oCommand = new OracleCommand (?,conn) ;
问题一 问号中应该填什么,书上说应该填写存储过程的名字,但是我是想调用包里面的函数,请问该怎么写。
问题二 怎么给这个函数添加参数。 
 
麻烦把剩下的代码写完吧 谢谢。

解决方案 »

  1.   

    OracleConnection conn = new OracleConnection (source);
    OracleCommand oCommand = new OracleCommand (?,conn) ;
    问题一 问号中应该填什么,书上说应该填写存储过程的名字,但是我是想调用包里面的函数,请问该怎么写。
    //填写SQL语句,比如select * from TableName
    问题二 怎么给这个函数添加参数。
    //
    private int GetData(string strSelect) 
    {
      OracleConnection conn = new OracleConnection (source);
     OracleCommand oCommand = new OracleCommand (strSelect,conn) ; return 1;
    }
      

  2.   

    楼上的,楼主想调用的是存储过程1.调用普通存储过程
    Oracle方面
    1.创建Oracle过程存储
    create or replace procedure proce_test(paramin in varchar2,paramout out varchar2,paraminout in out varchar2)
    as
      varparam varchar2(28);
    begin
      varparam:=paramin;
      paramout:=varparam|| paraminout;  
    end;
    2.测试过程存储
    declare
      param_out varchar2(28);
      param_inout varchar2(28);
    begin
      param_inout:='ff';   
      proce_test('dd',param_out,param_inout);   
      dbms_output.put_line(param_out);
    end;C#方面
    引用Oracle组件 
    using System;
    using System.Data;
    using System.Data.OracleClient;    namespace WebApplication4
    {
         public class OraOprater
         {
             private OracleConnection conn=null;
             private OracleCommand cmd=null;
             public OraOprater()
             {
                  string mConn="data source=ora9i.ora.com;user id=ora;password=ora";  //连接数据库
                  conn=new OracleConnection(mConn);
                  try
                  {
                       conn.Open();
                       cmd=new OracleCommand();
                       cmd.Connection=conn;
                  }
                  catch(Exception e)
                  {
                       throw e;
                  }
             }         public string SpExeFor(string m_A,string m_B)
             {
                    //存储过程的参数声明
                  OracleParameter[] parameters={
                                     new OracleParameter("paramin",OracleType.VarChar,20),
                                    new OracleParameter("paramout",OracleType.VarChar,20),
                                     new OracleParameter("paraminout",OracleType.VarChar,20)
                                                    };
                  parameters[0].Value=m_A;
                  parameters[2].Value=m_B;
                  parameters[0].Direction=ParameterDirection.Input;
                  parameters[1].Direction=ParameterDirection.Output;
                  parameters[2].Direction=ParameterDirection.InputOutput;
                  try
                  {
                       RunProcedure("proce_test",parameters);
                      return parameters[1].Value.ToString();
                  }
                  catch(Exception e)
                  {
                       throw e;
                  }
             }         private void RunProcedure(string storedProcName,OracleParameter[] parameters)
             {
                  cmd.CommandText=storedProcName;//声明存储过程名
                  cmd.CommandType=CommandType.StoredProcedure;
                  foreach(OracleParameter parameter in parameters)
                  {
                       cmd.Parameters.Add(parameter);
                  }
                  cmd.ExecuteNonQuery();//执行存储过程
             }
         }
    }2.调用包内方法
    包的写法:CREATE OR REPLACE PACKAGE pkg_cms AS     TYPE myrctype IS REF CURSOR;         PROCEDURE site_GetSiteData(Id_ number, p_rc OUT myrctype);    END pkg_cms;/CREATE OR REPLACE PACKAGE BODY pkg_cms AS     PROCEDURE site_GetSiteData(Id_ number,p_rc OUT myrctype)     IS            BEGIN                  OPEN p_rc FOR             Select  Id, Name, Url, Folder_Name, Desccms, Char_Name,            DB_Address, DB_User, DB_Password, DB_Name, DB_ConnString, HttpRoot            From WebSite_Info
        END site_GetSiteData;           END pkg_cms;
    C#调用:
    new OracleParameter(PARM_ID_, OracleType.Number, 8),
    new OracleParameter("p_rc", OracleType.Cursor, 2000, ParameterDirection.Output, true, 0, 0, "",DataRowVersion.Default, Convert.DBNull)//此处为包体中声明的游标类型};return OracleHelper.ExecuteReader(OracleHelper.CONN_STRING_BASE, CommandType.StoredProcedure,"pkg_cms.site_GetSiteData", param);//关键:调用时候先写包名