À l'heure actuelle, le code est (pour simplifier les choses, je n'ai pas encore utilisé l'objet de commande ADO pour empêcher l'injection SQL).Nécessité de convertir la procédure de pagination stockée pour les grands ensembles de données à l'aide de SQL Server 2005
J'ai un grand ensemble de données. J'utilise la méthode getrows qui est géniale pour récupérer les jeux d'enregistrements. Je ne peux pas trouver une procédure stockée similaire pour récupérer des enregistrements en fonction de la page que vous possédez dans le navigateur.
Fondamentalement, le sql récupère 10 jeux d'enregistrements par rapport à la page sur laquelle le navigateur clients est activé. Il obtient la valeur de la page à partir de la valeur CurrPage. Je gère la première page et la dernière page avec le code côté serveur afin qu'il n'y ait pas d'erreurs.
Toute aide est appréciée.
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
Je trouve cette procédure stockée sur http://www.aspfaqs.com/webtech/042606-1.shtml mais je ne peux pas le traduire à mes besoins.
TIA
Après un petit essai et erreur, voici le code de travail:
côté serveur:
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
procédure stockée:
@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
Merci à tous ceux qui ont aidé et m'a pointé dans la bonne direction
Il helo si vous décrivez comment vous pourriez ne pas traduire le code à vos besoins. Aussi, s'il vous plaît voir cet article de SSC http://www.sqlservercentral.com/articles/T-SQL/66030/ et la conversation de suivi (comme plus de valeur) http://www.sqlservercentral.com/Forums/Topic672980 -329-1.aspx –