oracle odp arraybindcount 极限,Oracle块编程返回结果集详解

三、调用

1、PL/SQL

declare

pagesize number :=3;

page number :=2;

indexx number:=0;

result Grades.Result;

grad Grade%rowtype;

begin

loop

fetch result into grad;

dbms_output.putLine(Grad.GradeName);

indexx:=indexx+1;

exit when indexx

end;

注意:

不能有游标的%notfount属性做判断,因为引用游标类型不支持。

没法用for 游标,也不支持.

2、ADP.net(C#)

using Oracle.DataAccess.Client;

using Oracle.DataAccess.Types;

OracleConnection conn=new OracleConnection("连接字符串");

OracleCommand cmd=new OracleCommand("FenYe_Grade",conn);

OracleParameter re=new OracleParameter(":Result",OracleDbType.RefCursor);

re.Direction=ParameterDirection.Output;

cmd.Parameters.Add(new OracleParameter(":p_PageSize",3));

cmd.Parameters.Add(new OracleParameter(":p_Page",2));

cmd.Parameters.Add(re);

conn.Open();

cmd.ExecuteNonQuery();

OracleDataReader read=(re.Value as OracleRefCursor).GetDataReader();

//读数据

//......

read.Close();

conn.Close();

Oracle中的游标类型由ODP.net中的OracleRefCursor类和OracleDataAdapter类解析,用OracleRefCursor的GetDataReader()可以获得OracleDataReader。用OracleDataAdapter解析,在调用Fill()方法时,该类会将输出的游标对应为一张      张DataTable.当只有一个输出游标时,如上面的代码实例,可以直接用OracleCommand的ExcuteReader()获得OracleDataReader。函数返回游标与存储过程返回接收一样。

讲到这里,再讲讲ADP.net里的多行插入吧,这和插入到sql server中有点不同。

2.1、多行插入.

利用ADO.net向sql server插入多行数据,有两种方法:1.拼一个insert into字符串集执行.2、利用DataSet做Fill或批处理.而在ADP.net,也有两种便捷的方法:1.拼insert into集,但要注意,不能纯是"inert into ...;insert into",必须要用          begin end包起来才能成功提交。2、便捷高效的批处理:

using Oracle.DataAccess.Client;

using Oracle.DataAccess.Types;

int[] GradeIds={1,2,3};

string[] GradeNames={"C","C++","C#"};

OracleConnection conn=new OracleConnection("连接字符串");

OracleCommand cmd=new OracleCommand("insert into Grade values(:GradeId,:GradeName)",conn);

OracleParameter re=new OracleParameter(":GradeId",OracleDbType.Int32);

re.Value=GradeIds;

OracleParameter name=new OracleParameter(":GradeName",OracleDbType.Varchar2);

name.Value=GradeNames;

cmd.Parameters.Add(re);

cmd.Parameters.Add(name);

cmd.ArrayBindCount=GradeIds.Length;//批处理量

conn.Open();

int count=cmd.ExecuteNonQuery();

conn.Close();

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值