您的位置:首页 > 数据库 > Oracle

c#调用Oracle存储过程返回的游标结果代码实例

2013-07-17 16:53 525 查看
之前对Oracle的接触都未牵涉到这一块的,刚开始确实不知道怎么处理,网上也查了写资料,但是都比较散,所以还是整理一下吧,仅供大家参考:

1、oracle中存储过程如下:

CREATE OR REPLACE PROCEDURE UP_dzSURFACE_EBGJSY(

TKALA VARCHAR2 , RC1 out PK_Var.RC )

AS

sSQL varchar2(2000) ;

begin

sSQL := ' select

TKALA as "旧编号" ,

GCEABG as "取样深度" , "LOAD1" as "加荷" ,

GCDLAG as "a" , GCDKBD as "Es" , GCDLAQ as "回弹指数Cs"

from tbdzEBGJSY where Upper(TKALA)='''|| Upper(TKALA) || ''' ' ;

Open RC1 for sSQL;

return;

end UP_dzSURFACE_EBGJSY;

2、c#代码如下:

//创建oracle参数

OracleParameter[] sqlParme = new OracleParameter[2]

//参数1

sqlParme[0] = new OracleParameter("RC1", OracleType.Cursor);

sqlParme[0].Direction = ParameterDirection.Output;

sqlParme[1] = new OracleParameter("TKALA", OracleType.VarChar);

sqlParme[1].Direction = ParameterDirection.Input;

sqlParme[1].Value = aHoleOldNum;

//从存储过程中获取dataTable数据源

private DataTable DBExecStoredProcedure(string storeureName, OracleParameter[] sqlParme)

{

try

{

//使用微软的ORACLE访问接口

if (DBHelper.G_pDBConn.State == ConnectionState.Closed)//获取数据连接

DBHelper.G_pDBConn.Open();

OracleCommand oraCmd = new OracleCommand(storeureName, DBHelper.G_pDBConn);

oraCmd.CommandType = CommandType.StoredProcedure;

oraCmd.Parameters.Clear();//先清空

foreach (OracleParameter parme in sqlParme)

{

oraCmd.Parameters.Add(parme);

}

DataTable table = new DataTable();

DateTime BegTime = System.DateTime.Now;

OracleDataAdapter da1 = new OracleDataAdapter(oraCmd);//取出数据

da1.Fill(table);

return table;

}

catch (Exception ex)

{

MessageBox.Show("执行存储过程失败:"+ex.Message,"调试");

return null;

}

finally {

DBHelper.G_pDBConn.Close();

}

}

最后,大致的过程就是这样了,希望对大家有帮助吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: