读书人

100分求分页存储与DATASET相结合的C#源

发布时间: 2012-03-06 20:47:55 作者: rapoo

100分求分页存储与DATASET相结合的C#源码
CREATE PROCEDURE Ly_GetRecordFromPage
@tblName varchar(255), -- 表名
@RetColumns varchar(1000) = '* ', -- 需要返回的列,默认为全部
@Orderfld varchar(255), -- 排序字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非 0 值则返回


@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1000) = ' ' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL varchar(1000) -- 主语句
declare @strTmp varchar(300) -- 临时变量
declare @strOrder varchar(400) -- 排序类型

if @IsCount != 0 --执行总数统计

begin
if @strWhere != ' '
set @strSQL = "select count(*) as Total from [ " + @tblName + "] where " + @strWhere


else
set @strSQL = "select count(*) as Total from [ " + @tblName + "] "
end

else --执行查询操作

begin

if @OrderType != 0
begin
set @strTmp = " <(select min "
set @strOrder = " order by [ " + @Orderfld + "] desc "
end


else
begin
set @strTmp = "> (select max "
set @strOrder = " order by [ " + @Orderfld + "] asc "
end

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from [ "
+ @tblName + "] where [ " + @Orderfld + "] " + @strTmp + "([ "


+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " [ "
+ @Orderfld + "] from [ " + @tblName + "] " + @strOrder + ") as tblTmp) "
+ @strOrder

if @strWhere != ' '
set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from [ "


+ @tblName + "] where [ " + @Orderfld + "] " + @strTmp + "([ "
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " [ "
+ @Orderfld + "] from [ " + @tblName + "] where ( " + @strWhere + ") "
+ @strOrder + ") as tblTmp) and ( " + @strWhere + ") " + @strOrder



if @PageIndex = 1
begin
set @strTmp = " "
if @strWhere != ' '
set @strTmp = " where ( " + @strWhere + ") "

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from [ "


+ @tblName + "] " + @strTmp + " " + @strOrder
end
end

exec (@strSQL)
GO


以上的存储过程
剩下的我就不会了
谁能提供一个比较完整的参考,有首页,上一页,下一页的,跳转的代码的源码,能完整的点的,我在网上搜罗了N久,还是找不到DATASET和存储过程结合的分页例子,自己又不会写,这样那样的分页存储过程多得要命,但是确没有一个实际的结合例子供人参考,有那个好心人帮忙写下,现在急需要啊,
小弟分不多,不够,可以再砸分,只求能得到一个比较完整的例子
小弟在此拜谢了!

100分求分页存储与DATASET相结合的C#源码

[解决办法]
sf~
不会。。。
[解决办法]
存储过程如下:
create PROC GetPageData
(
@PageNumINT,--页号
@PageSizeINT,--每页记录数
@OrderByNVARCHAR(255) = 'flcode ',--排序条件
@WhereNVARCHAR(1024) = '1=1 '--查询条件
)
AS

--按条件拼SQL语句
DECLARE @sql NVARCHAR(2048)
--临时变量,按给定的页号和分页大小,计算出的需查询的总记录条数
DECLARE @Total INT
--表中的记录总数
DECLARE @Count INT

SELECT @Count = COUNT(*) FROM flower

--判断参数 @PageSize, @PageNum是否有效
IF @PageSize <= 0
BEGIN
SET @PageSize = 1
END

IF @PageNum <= 0
BEGIN
SET @PageNum = 1
END

--输入的页号 @PageNum 有可能不在有效范围内。将其设定为有效值
IF @PageNum > (@Count / @PageSize)
BEGIN
SET @PageNum = (@Count / @PageSize)
IF @Count % @PageSize != 0
BEGIN
SET @PageNum = @PageNum + 1
END
END

--计算 @Total
SET @Total = @PageSize * @PageNum
IF @Total > @Count
BEGIN
SET @PageSize = @Count - ((@Count / @PageSize) * @PageSize)
SET @Total = @Count
END
/*
--通过前面的计算, @PageSize 有可能是 0。此时将它改变为1,避免后续计算的错误
IF @PageSize <= 0
BEGIN
SET @PageSize = 1
END
*/
--拼接并执行 SQL 语句
SET @sql = 'SELECT * FROM (SELECT TOP ' + CAST(@PageSize AS VARCHAR(10)) +
' * FROM (SELECT TOP ' +
CAST(@Total AS VARCHAR(10)) +
' * FROM flower WHERE ' + @Where + ' ORDER BY ' + @OrderBy + ' ASC)
AS A WHERE ' + @Where + ' ORDER BY ' + @OrderBy + ' DESC) AS flower ORDER BY ' + @OrderBy
PRINT @sql
EXEC sp_executesql @sql

GO

代码很简单,基本上就是调用些存储过程.
如有不明白的地方,我们再讨论...


希望立刻对你有帮助!
[解决办法]
表名 "flower "查找替换你自己的...
[解决办法]
到51aspx中找现成的
[解决办法]
http://dev.csdn.net/author/shadowsky/ca2029f2560a45779bc45601fa6fbc94.html
[解决办法]
public DataSet GetList(int PageSize, int PageIndex, string strWhere)
{
IDataParameter[] parameters = new IDataParameter[]{
new SqlParameter( "@tblName ", SqlDbType.VarChar, 255),
new SqlParameter( "@fldName ", SqlDbType.VarChar, 255),
new SqlParameter( "@PageSize ", SqlDbType.Int),
new SqlParameter( "@PageIndex ", SqlDbType.Int),
new SqlParameter( "@doCount ", SqlDbType.Bit),
new SqlParameter( "@OrderType ", SqlDbType.Bit),
new SqlParameter( "@strWhere ", SqlDbType.VarChar,1000)
};
parameters[0].Value = "Supplier ";
parameters[1].Value = "SupplierID ";
parameters[2].Value = PageSize;
parameters[3].Value = PageIndex;
parameters[4].Value = 0;
parameters[5].Value = 1;
parameters[6].Value = strWhere;
return DbHelperSQL.RunProcedure( "pagination ", parameters, "dtSupplier ");

}


[解决办法]
http://blog.csdn.net/hertcloud/archive/2006/04/13/661700.aspx

将 返回 由 DataReader 改成DataSet即可
[解决办法]
mark 打字太累了,拿个板凳看看

读书人网 >asp.net

热点推荐