zoukankan
html css js c++ java
[转]ASP.NET调用oracle存储过程实现快速分页
包定义:
create
or
replace
package MaterialManage
is
TYPE T_CURSOR
IS
REF
CURSOR
;
Procedure
Per_QuickPage
(
TbName
in
varchar2
,
--
表名
FieldStr
in
varchar2
,
--
字段集
RowFilter
in
varchar2
,
--
过滤条件
SortStr
in
varchar2
,
--
排序集
RownumFieldStr
in
varchar2
,
--
分页条件
TotalCount out
number
,
--
总记录数
Cur_ReturnCur out T_CURSOR
--
返回的游标
);
end
MaterialManage;
包主体:
create
or
replace
package body MaterialManage
is
Procedure
Per_QuickPage
(
TbName
in
varchar2
,
--
表 名
FieldStr
in
varchar2
,
--
字段集
RowFilter
in
varchar2
,
--
过滤条件
SortStr
in
varchar2
,
--
排序集
MinRowNum
in
number
,
--
分页小值
MaxRowNum
in
number
,
--
分页大值
TotalCount out
number
,
--
总记录数
Cur_ReturnCur out T_CURSOR
)
is
v_SourceTb1
varchar2
(
3000
);
--
动态表名1
v_SourceTb2
varchar2
(
3000
);
--
动态表名2
v_SourceTb3
varchar2
(
3000
);
--
动态表名3
v_SourceTb4
varchar2
(
3000
);
--
动态表名4
v_TotalCount
varchar2
(
50
);
--
总记录数
v_sql
varchar2
(
3000
);
--
动态sql
begin
v_SourceTb1 :
=
'
(select
'
||
FieldStr
||
'
from
'
||
TbName
||
'
) SourceTb1
'
;
v_SourceTb2 :
=
'
(select * from
'
||
v_SourceTb1
||
'
where
'
||
RowFilter
||
'
'
||
SortStr
||
'
) SourceTb2
'
;
v_SourceTb3 :
=
'
(select rownum as Rowindex,SourceTb2.* from
'
||
v_SourceTb2
||
'
where rownum<=
'
||
MaxRowNum
||
'
) SourceTb3
'
;
v_SourceTb4 :
=
'
(select * from
'
||
v_SourceTb1
||
'
where
'
||
RowFilter
||
'
) SourceTb4
'
;
v_sql :
=
'
select count(*) as TotalCount from
'
||
v_SourceTb4;
execute
immediate v_sql
into
v_TotalCount;
TotalCount :
=
v_TotalCount;
v_sql :
=
'
select * from
'
||
v_SourceTb3
||
'
where RowIndex >=
'
||
MinRowNum;
open
Cur_ReturnCur
for
v_sql;
end
Per_QuickPage;
END
MaterialManage;
由于oracle有个rownum特性,所以分页的时候就是利用rownum来实现。如果大家还有什么更好的办法记得告诉我一声,多谢了,因为我测试了上面的分页方法效率并不是很高。
存储过程返回了两个参数:TotalCount :当前条件下的总记录数 Cur_ReturnCur :游标类型,就是所要读取的记录的集合
下面是ASP.NET中调用的代码:
/**/
///
<summary>
///
调用存储过程实现快速分页
///
</summary>
///
<param name="TbName">
表名称
</param>
///
<param name="FieldStr">
字段名称
</param>
///
<param name="RowFilter">
过滤条件
</param>
///
<param name="SortStr">
排序字段
</param>
///
<param name="MinPageNum">
分页小值
</param>
///
<param name="MaxPageNum">
分页大值
</param>
///
<param name="TotalCount">
总记录(需要返回)
</param>
///
<returns>
DataTable
</returns>
public
DataTable QuickPage(
string
TbName,
string
FieldStr,
string
RowFilter,
string
SortStr,
int
MinRowNum,
int
MaxRowNum,
ref
int
RecordCount)
{
OracleConnection conn
=
new
OracleConnection(ConfigurationSettings.AppSettings[
"
OracleConnstr
"
].ToString());
OracleCommand cmd
=
new
OracleCommand();
cmd.Connection
=
conn;
cmd.CommandText
=
"
MaterialManage.Per_QuickPage
"
;
cmd.CommandType
=
CommandType.StoredProcedure;
cmd.Parameters.Add(
"
TbName
"
,OracleType.VarChar,
50
);
//
表 名
cmd.Parameters[
"
TbName
"
].Direction
=
ParameterDirection.Input;
cmd.Parameters[
"
TbName
"
].Value
=
TbName;
cmd.Parameters.Add(
"
FieldStr
"
,OracleType.VarChar,
3000
);
//
字段集
cmd.Parameters[
"
FieldStr
"
].Direction
=
ParameterDirection.Input;
cmd.Parameters[
"
FieldStr
"
].Value
=
FieldStr;
cmd.Parameters.Add(
"
RowFilter
"
,OracleType.VarChar,
3000
);
//
过滤条件
cmd.Parameters[
"
RowFilter
"
].Direction
=
ParameterDirection.Input;
cmd.Parameters[
"
RowFilter
"
].Value
=
RowFilter;
cmd.Parameters.Add(
"
SortStr
"
,OracleType.VarChar,
3000
);
//
排序字段
cmd.Parameters[
"
SortStr
"
].Direction
=
ParameterDirection.Input;
cmd.Parameters[
"
SortStr
"
].Value
=
SortStr;
cmd.Parameters.Add(
"
MinRowNum
"
,OracleType.Number);
//
分页小值
cmd.Parameters[
"
MinRowNum
"
].Direction
=
ParameterDirection.Input;
cmd.Parameters[
"
MinRowNum
"
].Value
=
MinRowNum;
cmd.Parameters.Add(
"
MaxRowNum
"
,OracleType.Number);
//
分页大值
cmd.Parameters[
"
MaxRowNum
"
].Direction
=
ParameterDirection.Input;
cmd.Parameters[
"
MaxRowNum
"
].Value
=
MaxRowNum;
cmd.Parameters.Add(
"
TotalCount
"
,OracleType.Number);
//
页总记录数
cmd.Parameters[
"
TotalCount
"
].Direction
=
ParameterDirection.Output;
cmd.Parameters[
"
TotalCount
"
].Value
=
0
;
cmd.Parameters.Add(
"
Cur_ReturnCur
"
,OracleType.Cursor);
//
返回的游标
cmd.Parameters[
"
Cur_ReturnCur
"
].Direction
=
ParameterDirection.Output;
DataSet Ds
=
new
DataSet();
OracleDataAdapter adapter
=
new
OracleDataAdapter(cmd);
adapter.Fill(Ds);
conn.Close();
//
总记录数
RecordCount
=
int
.Parse(cmd.Parameters[
"
TotalCount
"
].Value.ToString());
return
Ds.Tables[
0
];
}
查看全文
相关阅读:
无向图判断割点
C
连通图 求至少有给几个点信息才能传遍全图,至少添加几条边才能使全图联通
线段树区间更新(set暴力)
A
辗转相除法(数学推理)
Python List index()方法
Python List extend()方法
Python List count()方法
Python List append()方法
原文地址:https://www.cnblogs.com/jacktu/p/542432.html
最新文章
在阿里,我们这样帮助用户实现业务云原生化迁云
Kubernetes 弹性伸缩全场景解读(二)- HPA 的原理与演进
解锁云原生 AI 技能|在 Kubernetes 上构建机器学习系统
云原生生态周报 Vol. 11 | K8s 1.16 早知道
Knative 基本功能深入剖析:Knative Serving 的流量灰度和版本管理
阿里开源 KT Connnect,轻量级云原生测试环境治理平台来啦!
Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局
97. Interleaving String
309. Best Time to Buy and Sell Stock with Cooldown
188. Best Time to Buy and Sell Stock IV
热门文章
85. Maximal Rectangle
123. Best Time to Buy and Sell Stock III
132. Palindrome Partitioning II
1207. Unique Number of Occurrences
300. Longest Increasing Subsequence
96. Unique Binary Search Trees
网络流最大流(拆点)(附带kuangbin最大流模板)(目测这个题有bug)
最小费用最大流+(对最小费用最大流的理解)
网络流之最小费用最大流
线段树(dfs序建树加区间更新和单点查询)
Copyright © 2011-2022 走看看