rdlc 加载oracle存储过程结果集

来源:互联网 发布:制作淘宝详情页 编辑:程序博客网 时间:2024/05/29 17:54

最近在项目中用到了vs rdlc。在加载存储过程返回的结果集时,总得不到值,最后在网上查了查,总算解决了问题,写下来,加深一下记忆力。

有些老生常谈了 各位大侠、大牛们别见怪,见谅则个。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using Oracle.DataAccess;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using System.Data;
using System.Data.OleDb;
/// <summary>
///DBOperate 的摘要说明
/// </summary>
public class DBOperate
{

static String strconn = ConfigurationManager.AppSettings["ORACONNECTIONSTRING"].ToString();
OracleConnection oraconn = null;
public DBOperate()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
public OracleConnection getConn()
{
oraconn = new OracleConnection(strconn);
oraconn.Open();
return oraconn;
}
public OracleConnection closeConn()
{
oraconn.Dispose();
oraconn.Close();
return oraconn;
}
/// <summary>
/// 返回存储过程数据集
/// </summary>
/// <param name="rq">日期</param>
/// <param name="fjkdbm">参数1param>
/// <param name="jrjc">参数2</param>
/// <returns></returns>
public DataTable getProcDs(String rq, String fjkdbm, int jrjc)
{
DataTable dt = new DataTable();//声明要返回的datatable
OracleTransaction otr = getConn().BeginTransaction();//开始数据库事务
using (OracleCommand oracomm = oraconn.CreateCommand())//创建command,不要用new command
{
oracomm.Connection = oraconn;
oracomm.Transaction = otr;
oracomm.CommandText = "pk_rpt01.p_rpt01";//包头.包体
oracomm.CommandType = CommandType.StoredProcedure;
// 声明参数,双引号里面的最好和存储过程中的变量一样。
OracleParameter para_cursor = new OracleParameter("p_cursor",OracleDbType.RefCursor);
para_cursor.Direction = ParameterDirection.Output;
OracleParameter para_rq = new OracleParameter("s_rq", OracleDbType.Varchar2);
para_rq.Direction = ParameterDirection.Input;
para_rq.Value = rq.Trim();
OracleParameter para_dbm = new OracleParameter("s_fjkdbm", OracleDbType.Varchar2);
para_rq.Direction = ParameterDirection.Input;
para_dbm.Value = fjkdbm.Trim();
OracleParameter para_bz = new OracleParameter("i_cxbz", OracleDbType.Int32);
para_rq.Direction = ParameterDirection.Input;
para_bz.Value = jrjc;
//个人感觉应该要跟写的存储过程中,声明的参数顺序一样。
oracomm.Parameters.Add(para_cursor);
oracomm.Parameters.Add(para_rq);
oracomm.Parameters.Add(para_dbm);
oracomm.Parameters.Add(para_bz);
try
{
OracleDataAdapter oda = new OracleDataAdapter(oracomm);
oda.Fill(dt);
oda.Dispose();
}
finally
{
oracomm.Dispose();
closeConn();
}
return dt;

}

}
}

 

至于如何将数据集dt加载到rdlc,网上有很多 ,就不废话了。