亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:29:17
字體:
來源:轉載
供稿:網友

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

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

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

 

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

2、SQL Server 中調用測試代碼

 

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

asp.net 代碼實現:

 

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线色欧美三级视频| 欧美成年人网站| 亚洲mm色国产网站| 亚洲free性xxxx护士白浆| 91精品视频在线播放| 久久理论片午夜琪琪电影网| 亚洲综合小说区| 欧美激情国产日韩精品一区18| 福利一区福利二区微拍刺激| 91亚洲精品一区二区| 国a精品视频大全| 欧美日韩一区二区三区在线免费观看| 国产精品国产自产拍高清av水多| 亚洲综合中文字幕在线观看| 日韩精品一区二区视频| 亚洲综合中文字幕在线| 国内精品视频在线| 91国内在线视频| 亚洲自拍av在线| 国产大片精品免费永久看nba| 日本高清不卡的在线| 国产精品亚洲一区二区三区| www国产精品com| 久久久久久久激情视频| 成人国内精品久久久久一区| 国产欧美韩国高清| 日韩电影免费在线观看| 午夜精品久久久久久久男人的天堂| 色综合久久天天综线观看| 亚洲免费电影在线观看| 欧美一级免费看| 国产精品视频自在线| 成人a视频在线观看| 日韩视频在线观看免费| 精品亚洲一区二区三区在线观看| 国产精品免费福利| 国产一区二区三区四区福利| 欧美黑人xxxⅹ高潮交| 欧美成人国产va精品日本一级| 中日韩午夜理伦电影免费| 欧美日韩精品二区| 欧美一级成年大片在线观看| 欧美电影第一页| 91丝袜美腿美女视频网站| 欧美成人免费全部观看天天性色| 国产精品亚洲综合天堂夜夜| 91中文字幕一区| 国产精品十八以下禁看| 在线视频精品一| 亚洲国产精品99久久| 欧美激情二区三区| 全色精品综合影院| 97国产在线观看| 亚洲欧洲高清在线| 亚洲国产精品成人一区二区| 国产成人免费av| 国产欧美一区二区三区在线看| 国产精品一区二区三区毛片淫片| 韩国国内大量揄拍精品视频| 欧美一区二区大胆人体摄影专业网站| 国产精品爱久久久久久久| 久久九九国产精品怡红院| 一本一本久久a久久精品牛牛影视| 国产精品678| 日本19禁啪啪免费观看www| 国产亚洲欧洲在线| 黄色精品在线看| 欧美美女操人视频| 欧美高清不卡在线| 日韩av网站导航| 九九精品视频在线观看| 久久九九全国免费精品观看| 久久99精品久久久久久噜噜| 国产精品福利在线观看网址| 欧美亚洲视频在线看网址| 日韩在线视频观看正片免费网站| 久久久久久这里只有精品| 欧美最猛性xxxxx免费| 国内精品久久久久久影视8| 国产精品久久久久久久久粉嫩av| 91精品国产自产在线| 久久精品国产电影| 欧美性xxxx在线播放| 最近的2019中文字幕免费一页| 中文字幕在线观看日韩| 国产精品久久久久久久久久久久久| 中文字幕av一区二区三区谷原希美| 日韩av网址在线| 国产最新精品视频| 自拍偷拍亚洲在线| 欧美性猛交xxxx乱大交3| 亚洲精品一区二三区不卡| 国产精品成人aaaaa网站| 91成人福利在线| 成人免费在线视频网址| 日韩av在线影视| 国产婷婷成人久久av免费高清| 欧美精品一区二区三区国产精品| 日韩av电影在线网| 久久五月天综合| 久久久久久成人| 78色国产精品| 亚洲va久久久噜噜噜久久天堂| 777国产偷窥盗摄精品视频| 亚洲国产精品一区二区三区| 国产精品久久久久久久久男| 日韩理论片久久| 久国内精品在线| 日本韩国欧美精品大片卡二| 欧美精品日韩www.p站| 亚洲老头同性xxxxx| 中文国产成人精品久久一| 夜夜嗨av色综合久久久综合网| 久久久久免费精品国产| 97色伦亚洲国产| 精品视频www| 午夜精品久久久久久久白皮肤| 日韩中文字幕精品| 久久人体大胆视频| 91在线视频一区| 色爱av美腿丝袜综合粉嫩av| 富二代精品短视频| 亚洲无av在线中文字幕| 久久久久久国产精品三级玉女聊斋| 日韩成人在线视频观看| 国产精品中文久久久久久久| 亚洲欧美国产精品专区久久| 中文字幕在线国产精品| 欧美日韩成人精品| 国产成人精品久久| 日产精品久久久一区二区福利| 欧美亚洲另类视频| 欧美另类99xxxxx| 亚洲视频国产视频| 中文字幕在线精品| 国内精品久久久久久中文字幕| 欧美最猛性xxxxx免费| 欧美影院久久久| 欧美成人高清视频| 国产精品成人一区二区三区吃奶| 日韩中文字幕国产精品| 欧美日韩在线视频观看| 亚洲国产欧美日韩精品| 九九热这里只有精品免费看| 性欧美暴力猛交69hd| 大伊人狠狠躁夜夜躁av一区| 亚洲人成电影在线播放| 中文字幕日韩精品有码视频| 亚洲最大的av网站| 国产丝袜一区视频在线观看| 欧美成人在线免费视频| 粉嫩老牛aⅴ一区二区三区| 欧美激情性做爰免费视频| 欧美洲成人男女午夜视频| 欧美人成在线视频| 中文字幕少妇一区二区三区| 国内精品久久影院| 成人欧美一区二区三区在线| 亚洲丁香久久久| 国产精品成人aaaaa网站| 日韩国产一区三区| 欧美亚洲国产成人精品| 91精品国产乱码久久久久久久久| 欧美精品videosex极品1|