C#链接ORACLE执行 存储过程 返回DATASET

sean_zhou 2009-11-06 02:24:22
如题,我想通过oracle的一个存储过程返回一个DATASET,可是怎么也实现不了,在网上看那些说建包可我弄不好,弄了好几天头大了,谁有可以成功执行的代码可以发一段给我,或者指点下大概怎么弄,网上拷贝的别来。先谢谢各位。
...全文
500 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
荧宝她爸 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jiezi316 的回复:]
不用建立包哈,那个太麻烦了。
只需要那个游标类型的输出参数就行了。我有点忘记了,但我可以肯定不用建立包那么麻烦!
[/Quote]

同意 同意 虽然相隔快2年 很有用
jiezi316 2009-11-19
  • 打赏
  • 举报
回复

不用建立包哈,那个太麻烦了。
只需要那个游标类型的输出参数就行了。我有点忘记了,但我可以肯定不用建立包那么麻烦!
sean_zhou 2009-11-19
  • 打赏
  • 举报
回复
问题已解决,贴上代码供大伙参考,谢谢楼上各位。
private void button1_Click(object sender, EventArgs e)
{
OracleConnection con = new OracleConnection(BaseCollection.getLogo());//自已定义的数据访问接口
con.Open();
OracleCommand cmd = new OracleCommand("UNFOLDBOM_LAST", con);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter p1 = new OracleParameter("V_CS", OracleType.Cursor);
OracleParameter p2 = new OracleParameter("CODE",OracleType.VarChar);
P2.Value = "test";
p1.Direction = System.Data.ParameterDirection.Output;

cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "test");
this.dataGridView1.DataSource = ds.Tables["test"];
}


包头
create or replace package pk_wt is
type mytype is ref cursor;
procedure UNFOLDBOM_LAST(mycs out mytype);
end;
包体
CREATE OR REPLACE package BODY pk_wt is
procedure UNFOLDBOM_LAST(mycs out mytype) is
begin
open mycs for
select * from BMS_BOM; --这边是不是可以简化。?
end;
end;

存储过程

CREATE OR REPLACE PROCEDURE UNFOLDBOM_LAST(CODE VARCHAR2,V_CS OUT SYS_REFCURSOR) as

BEGIN
--数据的处理......
OPEN V_CS FOR select * from bms_wo ;--实际返回的是这个表的数据。我不大明白

RETURN ;
end;

END;
wuyq11 2009-11-18
  • 打赏
  • 举报
回复
使用数据库操作类,看看petshop
OracleCommand cmd=new OracleCommand("",orcn);
cmd.CommandType=CommandType.StoredProcedure;
OracleParameter p1=new OracleParameter("a",OracleType.Cursor);
p1.Direction=System.Data.ParameterDirection.Output;
cmd.Parameters.Add(p1);
OracleDataAdapter da=new OracleDataAdapter(cmd);
DataSet ds=new DataSet();
da.Fill(ds);
参考
langxian_1129 2009-11-18
  • 打赏
  • 举报
回复
包里边 不用 return varchar2了吧。本身参数已经返回的是游标了。

还有就是报的什么错呢
sean_zhou 2009-11-12
  • 打赏
  • 举报
回复
请liangxian帮我看看我这个哪里有问题,
下面是建包的
CREATE OR REPLACE package SCOTT.pk_wt
is
type mytype is ref cursor;
procedure p_wt(mycs out mytype);
return varchar2;
end;
/
CREATE OR REPLACE package BODY SCOTT.pk_wt
is
procedure p_wt(mycs out mytype)
is
begin
open mycs for select * from TMP_HIS_PPTN_JP;
end p_wt;
end pk_wt;
/
再下面是C#语句,可是执行总是报错



OracleConnection con = new OracleConnection(BaseCollection.getLogo());//自已定义的数据访问接口
con.Open();
OracleCommand cmd = new OracleCommand("pk_wt.p_wt", con);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter p1 = new OracleParameter("mycs", OracleType.Cursor);
p1.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(p1);
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "test");
this.dataGridView1.DataSource = ds.Tables[0];
liherun 2009-11-07
  • 打赏
  • 举报
回复
楼上,你的Lonely 在哪里改的?我怎么找不到
yjj3844 2009-11-07
  • 打赏
  • 举报
回复
关注
langxian_1129 2009-11-07
  • 打赏
  • 举报
回复
1、先定义个包
create or replace package PAG_TEST is
type result is ref cursor;
procedure PRO_TEST(ls_a varchar2,
result1 out result);
end PAG_TEST;

2、定义包体
create or replace package body PAG_TEST is
procedure PRO_TEST(ls_a varchar2,
result1 out result);
--存储过程代码
---
-----
--最后返回dataset
open result1 for select * from tablea;
end PAG_TEST;
3、C#写个方法 执行 这个存储过程
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="tableName">DataSet结果中的表名</param>
/// <returns>DataSet</returns>
public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string dataSetTableName)
{
/*
c# 代码
*/
}
regety 2009-11-06
  • 打赏
  • 举报
回复
确实是个问题,高手帮忙了。。
sean_zhou 2009-11-06
  • 打赏
  • 举报
回复
..
  • 打赏
  • 举报
回复
sean_zhou 2009-11-06
  • 打赏
  • 举报
回复
?各位教教我,头疼了好几天了

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧