一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - asp.net中如何調用sql存儲過程實現分頁

asp.net中如何調用sql存儲過程實現分頁

2020-04-20 17:24MRR Sql Server

使用sql存儲過程實現分頁,在網上能找到好多種解決方案,但是如何用asp.net后臺調用呢,通過本篇文章小編給大家詳解asp.net中如何調用sql存儲過程實現分頁,有需要的朋友可以來參考下

首先看下面的代碼創建存儲過程

1、創建存儲過程,語句如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
CREATE PROC P_viewPage
 @TableName VARCHAR(200), --表名
 @FieldList VARCHAR(2000), --顯示列名,如果是全部字段則為*
 @PrimaryKey VARCHAR(100), --單一主鍵或唯一值鍵
 @Where VARCHAR(2000), --查詢條件 不含'where'字符,如id>10 and len(userid)>9
 @Order VARCHAR(1000), --排序 不含'order by'字符,如id asc,userid desc,必須指定asc或desc    
               --注意當@SortType=3時生效,記住一定要在最后加上主鍵,否則會讓你比較郁悶
 @SortType INT,   --排序規則 1:正序asc 2:倒序desc 3:多列排序方法
 @RecorderCount INT--記錄總數 0:會返回總記錄
 @PageSize INT,   --每頁輸出的記錄數
 @PageIndex INT,   --當前頁數
 @TotalCount INT OUTPUT--記返回總記錄
 @TotalPageCount INT OUTPUT  --返回總頁數
AS
 SET NOCOUNT ON
 
 IF ISNULL(@TotalCount,'') = '' SET @TotalCount = 0
 SET @Order = RTRIM(LTRIM(@Order))
 SET @PrimaryKey = RTRIM(LTRIM(@PrimaryKey))
 SET @FieldList = REPLACE(RTRIM(LTRIM(@FieldList)),' ','')
 
 WHILE CHARINDEX(', ',@Order) > 0 OR CHARINDEX(' ,',@Order) > 0
 BEGIN
  SET @Order = REPLACE(@Order,', ',',')
  SET @Order = REPLACE(@Order,' ,',',')
 END
 
 IF ISNULL(@TableName,'') = '' OR ISNULL(@FieldList,'') = ''
  OR ISNULL(@PrimaryKey,'') = ''
  OR @SortType < 1 OR @SortType >3
  OR @RecorderCount < 0 OR @PageSize < 0 OR @PageIndex < 0
 BEGIN
  PRINT('ERR_00'
  RETURN
 END
 
 IF @SortType = 3
 BEGIN
  IF (UPPER(RIGHT(@Order,4))!=' ASC' AND UPPER(RIGHT(@Order,5))!=' DESC')
  BEGIN PRINT('ERR_02') RETURN END
 END
 
 DECLARE @new_where1 VARCHAR(1000)
 DECLARE @new_where2 VARCHAR(1000)
 DECLARE @new_order1 VARCHAR(1000) 
 DECLARE @new_order2 VARCHAR(1000)
 DECLARE @new_order3 VARCHAR(1000)
 DECLARE @Sql VARCHAR(8000)
 DECLARE @SqlCount NVARCHAR(4000)
 
 IF ISNULL(@where,'') = ''
  BEGIN
   SET @new_where1 = ' '
   SET @new_where2 = ' WHERE '
  END
 ELSE
  BEGIN
   SET @new_where1 = ' WHERE ' + @where
   SET @new_where2 = ' WHERE ' + @where + ' AND '
  END
 
 IF ISNULL(@order,'') = '' OR @SortType = 1 OR @SortType = 2
  BEGIN
   IF @SortType = 1
   BEGIN
    SET @new_order1 = ' ORDER BY ' + @PrimaryKey + ' ASC'
    SET @new_order2 = ' ORDER BY ' + @PrimaryKey + ' DESC'
   END
   IF @SortType = 2
   BEGIN
    SET @new_order1 = ' ORDER BY ' + @PrimaryKey + ' DESC'
    SET @new_order2 = ' ORDER BY ' + @PrimaryKey + ' ASC'
   END
  END
 ELSE
  BEGIN
   SET @new_order1 = ' ORDER BY ' + @Order
  END
 
 IF @SortType = 3 AND CHARINDEX(','+@PrimaryKey+' ',','+@Order)>0
  BEGIN
   SET @new_order1 = ' ORDER BY ' + @Order
   SET @new_order2 = @Order + ','
   SET @new_order2 = REPLACE(REPLACE(@new_order2,'ASC,','{ASC},'),'DESC,','{DESC},'
   SET @new_order2 = REPLACE(REPLACE(@new_order2,'{ASC},','DESC,'),'{DESC},','ASC,')
   SET @new_order2 = ' ORDER BY ' + SUBSTRING(@new_order2,1,LEN(@new_order2)-1) 
   IF @FieldList <> '*'
    BEGIN
     SET @new_order3 = REPLACE(REPLACE(@Order + ',','ASC,',','),'DESC,',',')    
     SET @FieldList = ',' + @FieldList  
     WHILE CHARINDEX(',',@new_order3)>0
     BEGIN
      IF CHARINDEX(SUBSTRING(','+@new_order3,1,CHARINDEX(',',@new_order3)),','+@FieldList+',')>0
      BEGIN
      SET @FieldList =
       @FieldList + ',' + SUBSTRING(@new_order3,1,CHARINDEX(',',@new_order3))  
      END
      SET @new_order3 =
      SUBSTRING(@new_order3,CHARINDEX(',',@new_order3)+1,LEN(@new_order3))
     END
     SET @FieldList = SUBSTRING(@FieldList,2,LEN(@FieldList))  
    END
  END
 
 SET @SqlCount = 'SELECT @TotalCount=COUNT(*),@TotalPageCount=CEILING((COUNT(*)+0.0)/'
     + CAST(@PageSize AS VARCHAR)+') FROM ' + @TableName + @new_where1
 IF @RecorderCount = 0
  BEGIN
    EXEC SP_EXECUTESQL @SqlCount,N'@TotalCount INT OUTPUT,@TotalPageCount INT OUTPUT',
         @TotalCount OUTPUT,@TotalPageCount OUTPUT
  END
 ELSE
  BEGIN
    SELECT @TotalCount = @RecorderCount 
  END
 
 IF @PageIndex > CEILING((@TotalCount+0.0)/@PageSize)
  BEGIN
   SET @PageIndex = CEILING((@TotalCount+0.0)/@PageSize)
  END
 
 IF @PageIndex = 1 OR @PageIndex >= CEILING((@TotalCount+0.0)/@PageSize)
  BEGIN
   IF @PageIndex = 1 --返回第一頁數據
    BEGIN
     SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '
         + @TableName + @new_where1 + @new_order1
    END
   IF @PageIndex >= CEILING((@TotalCount+0.0)/@PageSize) --返回最后一頁數據
    BEGIN
     SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('
         + 'SELECT TOP ' + STR(ABS(@PageSize*@PageIndex-@TotalCount-@PageSize))
         + ' ' + @FieldList + ' FROM '
         + @TableName + @new_where1 + @new_order2 + ' ) AS TMP '
         + @new_order1  
    END
  END
 ELSE
  BEGIN
   IF @SortType = 1 --僅主鍵正序排序
    BEGIN
     IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2 --正向檢索
      BEGIN
       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '
           + @TableName + @new_where2 + @PrimaryKey + ' > '
           + '(SELECT MAX(' + @PrimaryKey + ') FROM (SELECT TOP '
           + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey
           + ' FROM ' + @TableName
           + @new_where1 + @new_order1 +' ) AS TMP) '+ @new_order1
      END
     ELSE --反向檢索
      BEGIN
       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('
           + 'SELECT TOP ' + STR(@PageSize) + ' '
           + @FieldList + ' FROM '
           + @TableName + @new_where2 + @PrimaryKey + ' < '
           + '(SELECT MIN(' + @PrimaryKey + ') FROM (SELECT TOP '
           + STR(@TotalCount-@PageSize*@PageIndex) + ' ' + @PrimaryKey
           + ' FROM ' + @TableName
           + @new_where1 + @new_order2 +' ) AS TMP) '+ @new_order2
           + ' ) AS TMP ' + @new_order1
      END
    END
   IF @SortType = 2 --僅主鍵反序排序
    BEGIN
     IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2 --正向檢索
      BEGIN
       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '
           + @TableName + @new_where2 + @PrimaryKey + ' < '
           + '(SELECT MIN(' + @PrimaryKey + ') FROM (SELECT TOP '
           + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey
           +' FROM '+ @TableName
           + @new_where1 + @new_order1 + ') AS TMP) '+ @new_order1    
      END
     ELSE --反向檢索
      BEGIN
       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('
           + 'SELECT TOP ' + STR(@PageSize) + ' '
           + @FieldList + ' FROM '
           + @TableName + @new_where2 + @PrimaryKey + ' > '
           + '(SELECT MAX(' + @PrimaryKey + ') FROM (SELECT TOP '
           + STR(@TotalCount-@PageSize*@PageIndex) + ' ' + @PrimaryKey
           + ' FROM ' + @TableName
           + @new_where1 + @new_order2 +' ) AS TMP) '+ @new_order2
           + ' ) AS TMP ' + @new_order1
      END
    END   
   IF @SortType = 3 --多列排序,必須包含主鍵,且放置最后,否則不處理
    BEGIN
     IF CHARINDEX(',' + @PrimaryKey + ' ',',' + @Order) = 0
     BEGIN PRINT('ERR_02') RETURN END
     IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2 --正向檢索
      BEGIN
       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
           + 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
           + ' SELECT TOP ' + STR(@PageSize*@PageIndex) + ' ' + @FieldList
           + ' FROM ' + @TableName + @new_where1 + @new_order1 + ' ) AS TMP '
           + @new_order2 + ' ) AS TMP ' + @new_order1
      END
     ELSE --反向檢索
      BEGIN
       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
           + 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
           + ' SELECT TOP ' + STR(@TotalCount-@PageSize*@PageIndex+@PageSize) + ' ' + @FieldList
           + ' FROM ' + @TableName + @new_where1 + @new_order2 + ' ) AS TMP '
           + @new_order1 + ' ) AS TMP ' + @new_order1
      END
    END
  END
 PRINT(@Sql)
 EXEC(@Sql)
GO

2、SQL Server 中調用測試代碼

?
1
2
3
4
5
6
--執行存儲過程
 
declare @TotalCount int,
    @TotalPageCount int
exec P_viewPage 'T_Module','*','ModuleID','','',1,0,10,1,@TotalCount output,@TotalPageCount output
Select @TotalCount,@TotalPageCount;

asp.net 代碼實現:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#region ===========通用分頁存儲過程===========
  public static DataSet RunProcedureDS(string connectionString, string storedProcName, IDataParameter[] parameters, string tableName)
  {
 using (SqlConnection connection = new SqlConnection(connectionString))
 {
   DataSet dataSet = new DataSet();
   connection.Open();
   SqlDataAdapter sqlDA = new SqlDataAdapter();
   sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
   sqlDA.Fill(dataSet, tableName);
   connection.Close();
   return dataSet;
 }
  }
  /// <summary>
  /// 通用分頁存儲過程
  /// </summary>
  /// <param name="connectionString"></param>
  /// <param name="tblName"></param>
  /// <param name="strGetFields"></param>
  /// <param name="primaryKey"></param>
  /// <param name="strWhere"></param>
  /// <param name="strOrder"></param>
  /// <param name="sortType"></param>
  /// <param name="recordCount"></param>
  /// <param name="PageSize"></param>
  /// <param name="PageIndex"></param>
  /// <param name="totalCount"></param>
  /// <param name="totalPageCount"></param>
  /// <returns></returns>
  public static DataSet PageList(string connectionString, string tblName, string strGetFields, string primaryKey, string strWhere, string strOrder, int sortType, int recordCount,
 int PageSize, int PageIndex,ref int totalCount,ref int totalPageCount)
  {
 SqlParameter[] parameters ={ new SqlParameter("@TableName ",SqlDbType.VarChar,200),
  new SqlParameter("@FieldList",SqlDbType.VarChar,2000),
  new SqlParameter("@PrimaryKey",SqlDbType.VarChar,100),
  new SqlParameter("@Where",SqlDbType.VarChar,2000),
  new SqlParameter("@Order",SqlDbType.VarChar,1000),
  new SqlParameter("@SortType",SqlDbType.Int),
  new SqlParameter("@RecorderCount",SqlDbType.Int),
  new SqlParameter("@PageSize",SqlDbType.Int),
  new SqlParameter("@PageIndex",SqlDbType.Int),
  new SqlParameter("@TotalCount",SqlDbType.Int),
  new SqlParameter("@TotalPageCount",SqlDbType.Int)};
 
 parameters[0].Value = tblName;
 parameters[1].Value = strGetFields;
 parameters[2].Value = primaryKey;
 parameters[3].Value = strWhere;
 parameters[4].Value = strOrder;
 parameters[5].Value = sortType;
 parameters[6].Value = recordCount;
 parameters[7].Value = PageSize;
 parameters[8].Value = PageIndex;
 parameters[9].Value = totalCount;
 parameters[9].Direction = ParameterDirection.Output;
 parameters[10].Value = totalPageCount;
 parameters[10].Direction = ParameterDirection.Output;
 
 DataSet ds = RunProcedureDS(connectionString, "P_viewPage", parameters, "PageListTable");
 totalCount = int.Parse(parameters[9].Value.ToString());
 totalPageCount = int.Parse(parameters[10].Value.ToString());
 return ds;
  }
  #endregion
DataSet ds = SqlHelper.PageList(SqlHelper.LocalSqlServer, "T_User", "*", "UserID", "", "", 1, 0, pageSize, 1, ref totalCount, ref totalPageCount);
this.RptData.DataSource = ds;
this.RptData.DataBind();

以上內容就是本文介紹asp.net中如何調用sql存儲過程實現分頁的全部內容,希望對大家今后的學習有所幫助,當然方法不止本文所述,歡迎與大家分享好的方案。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 爽好大快深点一视频 | 国产一久久香蕉国产线看观看 | 青春娱乐国产分类精品二 | h黑寡妇一级毛片 | 999久久免费高清热精品 | 欧美久草在线 | 护士videossexo另类 | 久久毛片视频 | 国产精品第| 国产卡一卡二卡三乱码手机 | 日本无翼乌漫画 | 日韩一区二三区无 | 国产精品永久免费视频 | 果冻传媒在线视频观看免费 | 天天排行网 | 国产在线成人精品 | 午夜精品久久久内射近拍高清 | 黑人巨大爆粗亚裔女人 | 亚洲国产货青视觉盛宴 | 香蕉久久一区二区三区 | 91制片厂果冻星空传媒3xg | 9久爱午夜视频 | 俄罗斯美女大逼 | 深夜激情网 | 精品国产自在现线拍400部 | 国产在线视频一区二区三区 | 亚洲www视频| 91精品久久一区二区三区 | 国产一区二区三区四区波多野结衣 | 免费看伦理片 | 精品精品国产自在久久高清 | 国产九九热视频 | 啊哈用力cao我 | 精品日韩一区 | 韩日视频在线观看 | 鬼吹灯之天星术免费观看 | 亚洲经典激情春色另类 | 香蕉97超级碰碰碰免费公 | 国产成人一区二区三区在线视频 | 国产免费视频 | pregnantxxx孕交 |