请问一下,C# winform中通过OleDbCommand,怎么调用oracle返回游标类型的函数?急!!!

解决方案 »

  1.   

    /// <summary>
            /// 执行带参数的存储过程返回数据集
            /// </summary>
            /// <param name="StoreName">过程名称</param>
            /// <param name="ParamsName">参数名称列表</param>
            /// <param name="ParamsValue">参数值列表</param>
            /// <returns>返回的数据集</returns>
            public DataSet exeProc_ReDs(string StoreName, string[] ParamsName, object[] ParamsValue)
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = this.conn;
                if (inTran)
                {
                    cmd.Transaction = sqlTran;
                }            if ((ParamsName != null) && (ParamsName.Length != ParamsValue.Length))
                {
                    throw new System.Exception("参数和值不对应!");
                }            cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = StoreName;            if (ParamsName != null)
                {
                    SqlParameter OraParams;
                    for (int i = 0; i < ParamsName.Length; i++)
                    {
                        OraParams = new SqlParameter(ParamsName[i], ParamsValue[i]);
                        cmd.Parameters.Add(OraParams);
                    }            }            DataSet ds = new DataSet();
                using (SqlDataAdapter ad = new SqlDataAdapter())
                {
                    ad.SelectCommand = cmd;
                    ad.Fill(ds);
                }
                return ds;
            }
        }
      

  2.   

    1楼大哥,先谢谢了,不过你用的是sqlcommand,可是我要用的是oledbcommand.对应不一样.
      

  3.   

    根据上面代码改过的,还是不行。
    public string getByPD(string pdName, string[] values)
            {
                string temp = null;
                try
                {
                    OleDbCommand cmd = new OleDbCommand();
                    OleDbTransaction tran = con.BeginTransaction();
                    cmd.Transaction = tran;
                   
                    cmd.Connection = con;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = pdName;
                   
                    OleDbDataAdapter oda = new OleDbDataAdapter();
                    cmd.Parameters.Add(new OleDbParameter("?", OracleType.Cursor));
                    cmd.Parameters[0].Direction = ParameterDirection.Output;//注册返回参数
                
                                    oda.SelectCommand = cmd;
                    DataSet ds = new DataSet();
                    oda.Fill(ds);
                    tran.Commit();
                }
                catch (Exception e)
                {
                    throw e;
                }
                return temp;
            }
      

  4.   

    终于解决using (OleDbConnection oracleConn = new OleDbConnection(this.getURL()))
                    {
                        // open connection
                        try { oracleConn.Open(); }
                        catch { throw new Exception(); }
                        // build command
                        OleDbCommand cmd = new OleDbCommand("{call fn_getcorp(?)}", oracleConn);
                        cmd.CommandType = CommandType.Text;
                        // add parameters
                        cmd.Parameters.Add("vsguid", OleDbType.VarChar).Value = "5BDBB7B538034877B0AAD2E0F9B28DF7";
                        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                        // fill dataset
                        DataSet ds = new DataSet();
                        da.Fill(ds);
                        return ds.Tables[0].Rows.Count.ToString();
                        // all done, return
                       // return ds;
                    }