Implémenter la pagination dans les procédures stockées
Auteur:Eve Cole
Date de mise à jour:2009-07-01 15:55:30
Je ne suis pas un programmeur très expérimenté, je rencontrerai donc de nombreux problèmes au cours du projet. L'utilisation de la pagination dans la base de données est l'un des problèmes que j'ai rencontrés au cours du projet. J'ai vérifié beaucoup d'informations sur Internet, et il existe de nombreuses méthodes. Mais je pense que la création d'une table de données temporaire est la méthode la plus simple. Lorsque je faisais l'extension Membership, j'ai découvert que Microsoft l'utilisait également de cette façon. Vous pouvez simplement ouvrir une procédure stockée Membership et y jeter un œil.
Inutile d'en dire plus, il suffit de regarder le code et ce sera clair, haha.
1CRÉER UNE PROCÉDURE dbo.CreateSimple
2(
3 @PageIndex entier,
4 @PageSize entier
5)
6AS
7DEBUT
8 --Définissez trois variables :
9 -- @PageLowerBound : La limite inférieure des enregistrements récupérés.
10 -- @PageUpperBound : La limite supérieure des enregistrements à récupérer.
11 -- @TotalRecords : renvoie le nombre total d'enregistrements, principalement utilisé pour les calculs de pages.
12 DÉCLARER @PageLowerBound int
13 DÉCLARER @PageUpperBound int
14 DÉCLARER @TotalRecords int
15
16 --Calculer les valeurs des limites supérieure et inférieure.
17 SET @PageLowerBound=@PageIndex * @PageSize
18 SET @PageUpperBound=@PageLowerBound+@PageSize-1
19
20--Créer une table temporaire :
21--IndexId est l'identifiant et augmente automatiquement de 1 ;
22--SimpleId est rempli par la table de données [Simple] ;
23 CRÉER UNE TABLE #PageIndexForSimple
vingt-quatre (
25 IndexId int identité (0,1) NON NULL,
26 SimpleId entier
27)
28--Remplir la table temporaire
29 INSÉRER DANS #PageIndexForSimple(SimpleId)
30 SELECT s.[SimpleId]
31 DE [Simple] s
32 --WHERE et les instructions ODER BY peuvent être ajoutées ici
33
34 --Obtenez le nombre total d'enregistrements. En fait, le nombre de lignes concernées correspond au nombre total d'enregistrements.
35 SELECT @TotalRecords=@@ROWCOUNT
36
37 --Obtenez le disque que nous voulons.
38 SÉLECTIONNER a.*
39 DE [Simple] s,#PageIndexForSimple p
40 OÙ s.[SimpleId]=p.[SimpleId]
41 ET p.[IndexId]>=@PageLowerBound
42 ET P.[IndexId]< =@PageUpperBound
43 ORDONNER PAR art.[Simple]
44
45 --Renvoie le nombre total d'enregistrements.
46 RETOUR @TotalRecords
47FIN Vous pouvez le comprendre à partir des commentaires ci-dessus Haha, maintenant que je l'ai écrit ici, écrivez également le code du programme :
1Liste publique<Simple> GetSimple(int pageIndex,int pageIndex,out int totalRecords){
2 List<Simple>entity=new List<Simple>();
3 SqlParameter[]param=nouveau SqlParameter[]{
4 nouveaux SqlParameter("@PageIndex",SqlDbType.Int),
5 nouveaux SqlParameter("@PageSize",SqlDbType.Int),
6 nouveaux SqlParameter("@ReturnValue",SqlDbType.Int),
7} ;
8 param[0].Value=pageIndex;
9 param[1].Value=pageSize;
10 param[2].Direction = ParameterDirection.ReturnValue;
11 SqlDataReader reader=SqlHelper.ExecuteReader(CommandType.StoredProcedure, "GetSimple", param);
12 Tandis que(reader.Read()){
13 entité.Add(GetSimpleEntity(lecteur))
14}
15 lecteur.Close();
16 essais{
17 totalRecords=(int)param[2].Valeur ;
18 }attraper{}
19 entité de retour ;
20} Certaines des fonctions ci-dessus ont été écrites par moi-même :
Classe SqlHelper : classe de requête de base de données simplifiée.
GetSimpleEntity (lecteur SqlDataReader) : étant donné que l'acquisition de classes d'entités de base est souvent utilisée dans les projets, une fonction privée distincte est écrite pour être réutilisée ;
Il convient de noter que lors de l'obtention du nombre total d'enregistrements, le type peut être DbNull, provoquant une erreur.
http://www.cnblogs.com/xdotnet/archive/2006/09/19/procedure_for_paging_select.html