我用的是vs2005,采用了sqldatasource数据源控件,如果把sqldatasource的mode设置成dataset很简单,没有问题。
但是因为数据量比较大,我不想在服务器缓存大量数据,想一次读取一页的数据,翻页的时候再重新取数据。在sqldatasource中不知道该如何实现?我有个例子是ObjectDataSource实现数据源分页的例子,通过ObjectDataSource的SelectCountMethod编程实现,但是sqldatasource没有这个啊!
但是因为数据量比较大,我不想在服务器缓存大量数据,想一次读取一页的数据,翻页的时候再重新取数据。在sqldatasource中不知道该如何实现?我有个例子是ObjectDataSource实现数据源分页的例子,通过ObjectDataSource的SelectCountMethod编程实现,但是sqldatasource没有这个啊!
你不要用ScriptManager1
你用后台代码用 Gridview1.DataSource = "返回的数据";
Gridview1.DataBind();
SQL里怎么写呢?能否给出个简单例子?
CREATE PROCEDURE dbo.GetPageRecord
(
@tblName varchar(255), -- 表名
@fldlist varchar(1000)='*',
@fldName varchar(255), --排序字段
@KeyField varchar(255), --主键
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 1, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(4000) = '' -- 查询条件 (注意: 不要加 where)
)
AS
SET NOCOUNT ON
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
-- Set the page bounds
SET @PageLowerBound = @PageSize * @PageIndex
SET @PageUpperBound = @PageLowerBound + @PageSize + 1
-- Create a temp table to store the select results
create table #temp
(
RecNo int IDENTITY (1, 1) NOT NULL,
oldid int
)
--generate record
Declare @Sqlstr varchar(6000)
set @sqlstr='select '+@Keyfield+' from '+@tblname
if(@strWhere<>'')
begin
set @Sqlstr=@sqlstr+' where ('+@strWhere+')'
end
set @sqlstr=@sqlstr+' order by '+@fldName
if(@ordertype=0)
begin
set @sqlstr=@sqlstr+' asc'
end
else
begin
set @sqlstr=@sqlstr+' desc'
end
set @sqlstr='insert into #temp (oldid) '+@sqlstr
execute(@sqlstr)
set @sqlstr='SELECT '+@fldList+' FROM '+@tblname+' TableA (nolock), #temp T WHERE T.oldid = TableA.'+@keyfield+' AND T.RecNo > '+ cast(@PageLowerBound as varchar)+' AND T.RecNo < '+cast(@PageUpperBound as varchar)+' ORDER BY T.RecNo'
execute(@sqlstr)
GO