Сейчас код такой (для простоты, я еще не использовал объект команд ADO для предотвращения внедрения SQL).
У меня большой набор данных.Я использую метод getrows, который отлично подходит для получения наборов записей.Я не могу найти аналогичную хранимую процедуру для извлечения записей на основе того, какая у вас страница в браузере.
В основном sql извлекает 10 наборов записей относительно страницы, на которой находится браузер клиента.Он получает значение страницы из значения CurrPage.Я обрабатываю первую и последнюю страницы с помощью кода на стороне сервера, поэтому ошибок нет.
Любая помощь приветствуется.
If IsEmpty(Request.Querystring("pg")) then
CurrPage = 1
Else
CurrPage = Cint(Request.Querystring("pg"))
End If
RSPrevPage = CurrPage -1
RSNextPage = CurrPage + 1
SQL = "SELECT gallerypublic.img, gallerypublic.galleryID, blahblahblah FROM gallerypublic INNER JOIN GalleryPublicCat ON gallerypublic.publicgallerycatid = GalleryPublicCat.pubcatID INNER JOIN userbase ON gallerypublic.userid = userbase.userid Order by galleryid desc"
Set rsFeed = Server.CreateObject("ADODB.Recordset")
rsFeed.Open sql, Conn, adOpenKeyset, adLockReadOnly
rsFeed.PageSize = 10
rsFeed.AbsolutePage = CurrPage
arrFeed = rsFeed.getrows(10)
intPageCount = rsFeed.PageCount
rsFeed.close
set rsFeed = Nothing
Я нашел эту хранимую процедуру в http://www.aspfaqs.com/webtech/042606-1.shtmlно я не могу перевести его на свои нужды.
TIA
После небольшой проб и ошибок вот рабочий код:
Сторона сервера:
If IsEmpty(Request.Querystring("pg")) then
CurrPage = 1
Else
CurrPage = Cint(Request.Querystring("pg"))
End If
RSPrevPage = CurrPage -1
RSNextPage = CurrPage + 1
pgSize = 10
Set objCommandSec = CreateObject("ADODB.Command")
objCommandSec.ActiveConnection = Conn
With objCommandSec
Set .ActiveConnection = Conn
.CommandType = adCmdStoredProc
.CommandText = "spPageDef"
.Parameters.Append .CreateParameter("@PageNum", 200, 1, 255, CurrPage)
.Parameters.Append .CreateParameter("@PageSize", 200, 1, 255, pgSize)
.Parameters.Append .CreateParameter("@TotalRowsNum", adInteger, adParamReturnValue)
Set rsFeed = objCommandSec.Execute
arrFeed = rsFeed.getrows()
rsFeed.close
set rsFeed = nothing
intPageCount = cLng((.Parameters(2).value/pgSize))
End With
Хранимая процедура:
@PageNum int,
@PageSize int,
@TotalRowsNum int output
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Use ROW_NUMBER function
WITH DefaultEntries As
(
SELECT
g.img, g.galleryID, g.viewed, g.votes, g.rate, g.created, blahblah,
'RowNumber' = ROW_NUMBER() OVER(ORDER BY galleryid DESC)
FROM gallerypublic AS g INNER JOIN GalleryPublicCat AS gpc ON g.publicgallerycatid = gpc.pubcatID INNER JOIN userbase AS u ON g.userid = u.userid
)
-- Query result
SELECT *
FROM DefaultEntries
WHERE RowNumber BETWEEN (@PageNum - 1) * @PageSize + 1 AND @PageNum * @PageSize
ORDER BY galleryid DESC
SELECT @TotalRowsNum = count(galleryid)
FROM gallerypublic AS g INNER JOIN GalleryPublicCat AS gpc ON g.publicgallerycatid = gpc.pubcatID INNER JOIN userbase AS u ON g.userid = u.userid
END
Спасибо всем, кто помог и указал мне правильное направление