C#執行oracle返回游標類型的存儲過程


存儲過程代碼為:

create or replace procedure proc_test(pCursor  OUT pak_pub.ut_cursor) AS  
begin  
-- 使用游標
open pCursor for select * from temp;  
end ;  

 

其中pak_pub.ut_cursor的定義為:

/*創建一個package存放定義的游標*/
create or replace package pak_pub  
as   
type ut_cursor is ref cursor;   
end;  

C#執行oracle存儲過程:

            //存儲過程參數設置  
            OracleParameter[] par =
            {
                new OracleParameter("pCursor", OracleType.Cursor)
            };
            par[0].Direction = ParameterDirection.Output;
            DataTable re = new DBHelper(connection).GetDataTable("proc_test",CommandType.StoredProcedure, par);  
DBHelper類:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Data.OracleClient;

namespace Jory.Core.Utility
{
    public class DBHelper
    {
        #region 數據庫連接字符串

        /// <summary>
        /// 數據庫連接字符串
        /// </summary>
        private string conStr { get; set; }
        public DBHelper()
        {
            conStr = "";
        }

        public DBHelper(PbConnection connection)
        {
            conStr = connection.ConnectionString;
        }
        #endregion


        #region 數據的增刪改
        /// <summary>
        /// 數據的增刪改
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="opar"></param>
        /// <returns></returns>
        public int ExecuteNonQuery(string sql, CommandType commandType, params OracleParameter[] opar)
        {
            using (OracleConnection con = new OracleConnection(conStr))
            {
                using (OracleCommand cmd = new OracleCommand(sql, con))
                {
                    con.Open();
                    // 設置命令文本(存儲過程名或SQL語句)
                    cmd.CommandType = commandType;
                    cmd.Parameters.AddRange(opar);
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        #endregion

        #region 數據查詢結果集為一行一列
        /// <summary>
        /// 數據查詢結果集為一行一列
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="opar"></param>
        /// <returns></returns>
        public object ExecuteScalar(string sql, CommandType commandType, params OracleParameter[] opar)
        {
            using (OracleConnection con = new OracleConnection(conStr))
            {
                using (OracleCommand cmd = new OracleCommand(sql, con))
                {
                    cmd.Parameters.AddRange(opar);
                    // 設置命令文本(存儲過程名或SQL語句)
                    cmd.CommandType = commandType;
                    con.Open();
                    return cmd.ExecuteScalar();
                }
            }
        }
        #endregion

        #region 返回查詢結果集Table
        /// <summary>
        /// 返回查詢結果集Table
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="opar"></param>
        /// <returns></returns>
        public DataTable GetDataTable(string sql, CommandType commandType, params OracleParameter[] opar)
        {
            DataTable dt = new DataTable();
            using (OracleDataAdapter dap = new OracleDataAdapter(sql, conStr))
            {
                dap.SelectCommand.Parameters.AddRange(opar);
                dap.SelectCommand.CommandType = commandType;
                dap.Fill(dt);
            }
            return dt;
        }
        #endregion

        #region 返回查詢結果集DataReader
        /// <summary>
        /// 返回查詢結果集DataReader
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="opar"></param>
        /// <returns></returns>
        public OracleDataReader DataReader(string sql, CommandType commandType, params OracleParameter[] opar)
        {
            OracleConnection con = new OracleConnection();
            using (OracleCommand cmd = new OracleCommand(sql, con))
            {
                cmd.CommandType = commandType;
                cmd.Parameters.AddRange(opar);
                try
                {
                    con.Open();
                    // 執行完關閉對象 con
                    return cmd.ExecuteReader(CommandBehavior.CloseConnection);
                }
                catch
                {
                    con.Close();
                    con.Dispose();
                    throw;
                }
            }
        }
        #endregion
    }
}
PbConnection類:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Jory.FrameWork.Common
{
    public class PbConnection
    {
        public string ConnectionString
        {
            get;
            set;
        }

        public PbConnection()
        {
        }
        public PbConnection(string connectionString)
        {
            ConnectionString = connectionString;
        }
    }
}

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM