分页存储过程ALTER PROCEDURE [dbo].[sp_TablesPage]
(
@tblName nvarchar(1000), ----要显示的表或多个表的连接
@fields nvarchar(1000)='*', ----要显示的字段列表
@sortfields nvarchar(100)='', ----如果多列排序,一定要带asc或者desc,则@singleSortType排序方法无效,反之,单列根据@singleSortType来处理
@singleSortType int = 1, ----排序方法,0为升序,1为降序
@pageSize int = 10, ----每页显示的记录个数
@pageIndex int = 1, ----要显示那一页的记录
@strCondition nvarchar(1000)='', ----查询条件,不需where
@Counts int =1 output ----查询到的记录数
) @strCondition为存储过程中执行sql语句的where条件,我传进来的会有parameter参数化var outParmeter = DbManager.OutputParameter("@Counts", SqlDbType.Int);
ListParameters = new List<IDbDataParameter>
{
DbManager.InputParameter("@tblName", tableName),
DbManager.InputParameter("@fields", fields),
DbManager.InputParameter("@sortfields", sortfield),
DbManager.InputParameter("@singleSortType", singleSortType ? "1" : "0"),
DbManager.InputParameter("@pageSize", pageSize),
DbManager.InputParameter("@pageIndex", pageIndex),
DbManager.InputParameter("@strCondition", condition),
outParmeter
};
if (listParameters != null) ListParameters.AddRange(listParameters);
var dt = DbManager.SetCommand(CommandType.StoredProcedure, "sp_TablesPage", ListParameters.ToArray()).ExecuteDataTable();
count = (int)outParmeter.Value;
return dt;listParameters:是存储过程strCondition中的参数化parameter
现在我很郁闷把参数一并传进来却当成了存储过程的input参数,请问BLToolkit怎么才能加入strCondition中所需要的参数?
(
@tblName nvarchar(1000), ----要显示的表或多个表的连接
@fields nvarchar(1000)='*', ----要显示的字段列表
@sortfields nvarchar(100)='', ----如果多列排序,一定要带asc或者desc,则@singleSortType排序方法无效,反之,单列根据@singleSortType来处理
@singleSortType int = 1, ----排序方法,0为升序,1为降序
@pageSize int = 10, ----每页显示的记录个数
@pageIndex int = 1, ----要显示那一页的记录
@strCondition nvarchar(1000)='', ----查询条件,不需where
@Counts int =1 output ----查询到的记录数
) @strCondition为存储过程中执行sql语句的where条件,我传进来的会有parameter参数化var outParmeter = DbManager.OutputParameter("@Counts", SqlDbType.Int);
ListParameters = new List<IDbDataParameter>
{
DbManager.InputParameter("@tblName", tableName),
DbManager.InputParameter("@fields", fields),
DbManager.InputParameter("@sortfields", sortfield),
DbManager.InputParameter("@singleSortType", singleSortType ? "1" : "0"),
DbManager.InputParameter("@pageSize", pageSize),
DbManager.InputParameter("@pageIndex", pageIndex),
DbManager.InputParameter("@strCondition", condition),
outParmeter
};
if (listParameters != null) ListParameters.AddRange(listParameters);
var dt = DbManager.SetCommand(CommandType.StoredProcedure, "sp_TablesPage", ListParameters.ToArray()).ExecuteDataTable();
count = (int)outParmeter.Value;
return dt;listParameters:是存储过程strCondition中的参数化parameter
现在我很郁闷把参数一并传进来却当成了存储过程的input参数,请问BLToolkit怎么才能加入strCondition中所需要的参数?
解决方案 »
- 新人来问好:GridView 的删除按钮 怎么使?SqlDataSource的删除怎么设置?
- 如何实现单击TreeView的节点时页面不刷新
- 各位高手:我在.aspx里面用了loction.href='corLeaveWord.aspx?shid='+sh_id 。为什么页面没有跳到我指定参数的页面
- 作为一个.NET 的初学者,请教一个下拉框的问题
- 请问你们做B/S的什么地方用到了线程啊
- 求一绑定表达式+皮肤编辑
- 函数变量前面加一个“out”是表示什么意思?
- 老问题-----图片上传与图片浏览。
- 高分求mcsd(for .net)的电子资料
- 简单的问题,查询时提示"正在查询...",结束后提示"查询完毕"
- 如何把DLL反编译的文件重新编译成DLL
- 网上电子支付
(
@tblName nvarchar(1000), ----要显示的表或多个表的连接
@fields nvarchar(1000)='*', ----要显示的字段列表
@sortfields nvarchar(100)='', ----如果多列排序,一定要带asc或者desc,则@singleSortType排序方法无效,反之,单列根据@singleSortType来处理
@singleSortType int = 1, ----排序方法,0为升序,1为降序
@pageSize int = 10, ----每页显示的记录个数
@pageIndex int = 1, ----要显示那一页的记录
@strCondition nvarchar(1000)='', ----查询条件,不需where
@Counts int =1 output ----查询到的记录数
) AS
declare @sqlTmp nvarchar(2000)
declare @sqlGetCount nvarchar(2000)
declare @frontOrder nvarchar(200)
declare @behindOrder nvarchar(200)
declare @start nvarchar(20)
declare @end nvarchar(20)
declare @pageCount INT
if @strCondition=''
set @strCondition=' where 1=1'
else
set @strCondition=' where '+@strCondition
begin
if charindex(',',@sortfields,0)>0--多列排序,则@singleSortType排序方法无效
begin
set @frontOrder = @sortfields--获取分页前半部分数据的排序规则
set @behindOrder = replace(@frontOrder,'desc','desctmp')
set @behindOrder = replace(@behindOrder,'asc','desc')
set @behindOrder = replace(@behindOrder,'desctmp','asc')--获取分页后半部分数据的排序规则
end
else--单列
begin
set @sortfields=replace(replace(@sortfields,'desc',''),'asc','')--替换掉结尾的规则,用@singleSortType值来处理排序
if @singleSortType=1--倒序
begin
set @frontOrder = @sortfields + ' desc'
set @behindOrder = @sortfields + ' asc'
end
else
begin
set @frontOrder = @sortfields + ' asc'
set @behindOrder = @sortfields + ' desc'
end
end --获取记录数
set @sqlGetCount = 'select @Counts=count(*) from ' + @tblName + @strCondition
----取得查询结果总数量-----
exec sp_executesql @sqlGetCount,N'@Counts int out ',@Counts out
declare @tmpCounts int
if @Counts = 0
set @tmpCounts = 1
else
set @tmpCounts = @Counts --取得分页总数
set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize /**当前页大于总页数 取最后一页**/
if @pageIndex>@pageCount
set @pageIndex=@pageCount
/*-----数据分页2分处理-------*/
declare @pageIndexNew int --总数/页大小
declare @lastcount int --总数%页大小 最后一页的数据量 set @pageIndexNew = @tmpCounts/@pageSize
set @lastcount = @tmpCounts%@pageSize
if @lastcount > 0
set @pageIndexNew = @pageIndexNew + 1
else
set @lastcount = @pagesize --取得数据的逻辑分析
if @pageIndexNew<2 or @pageIndex<=@pageIndexNew / 2 + @pageIndexNew % 2 --前半部分数据处理
begin
--计算开始结束的行号
set @start = @pageSize*(@pageIndex-1)+1
set @end = @start+@pageSize-1
set @sqlTmp='SELECT * FROM (select '+@fields+',ROW_NUMBER() OVER ( Order by '+@frontOrder+' ) AS RowNumber From '+@tblName+@strCondition+') T WHERE T.RowNumber BETWEEN '+@start+' AND '+@end
end
else
begin
set @pageIndex = @pageIndexNew-@pageIndex+1 --后半部分数据处理
if @lastcount=@pageSize --如果正好是整数页
begin
set @start = @pageSize*(@pageIndex-1)+1
set @end = @start+@pageSize-1
end
else
begin
set @start = @lastcount+@pageSize*(@pageIndex-2)+1
set @end = @start+@pageSize-1
end
set @sqlTmp='select top '+@end+' * FROM (select '+@fields+',ROW_NUMBER() OVER ( Order by '+@behindOrder+' ) AS RowNumber From '+@tblName+@strCondition+') T WHERE T.RowNumber BETWEEN '+@start+' AND '+@end+' order by RowNumber desc '
end
end
exec sp_executesql @sqlTmp