今天自己写了一个分页的存储过程来练习一下,该存储过程一共有7个参数,其中最后一个参数的OUTPUT,用于返回一共得页数

C#取存储过程的数据set ANSI_NULLS ON
C#取存储过程的数据
set QUOTED_IDENTIFIER ON
C#取存储过程的数据
go
C#取存储过程的数据
C#取存储过程的数据
ALTER PROCEDURE [dbo].[PagingProc]
C#取存储过程的数据    
@PageIndex INT,                --当前页码从0开始
C#取存储过程的数据
    @PageSize INT,                --每页的大小
C#取存储过程的数据
    @TableName NVARCHAR(100),    --表名称
C#取存储过程的数据
    @Orders NVARCHAR(100),        --排序
C#取存储过程的数据
    @Columns NVARCHAR(100),        --需要检索的列集合,中间用英文逗号隔开e.g.:ID,NAMEC#取存储过程的数据
C#取存储过程的数据
    @Filters NVARCHAR(100),        --过滤条件语句
C#取存储过程的数据
    @TotalPages INT OUTPUT
C#取存储过程的数据
AS
C#取存储过程的数据
BEGIN
C#取存储过程的数据    
DECLARE @SQL NVARCHAR(200)        --查询当前页所有记录的sql语句
C#取存储过程的数据
    DECLARE @PAGESSQL NVARCHAR(200)    --查询行数的sql语句
C#取存储过程的数据
    DECLARE @TOTALCOUNT INT            --一共得行数,用于计算所总页数
C#取存储过程的数据
    SET NOCOUNT ON
C#取存储过程的数据    
IF @Filters <> ''
C#取存储过程的数据        
SET @PAGESSQL = 'SELECT @TOTALCOUNT = COUNT(*) FROM ' + @TableName + ' WHERE ' + @Filters
C#取存储过程的数据    
ELSE
C#取存储过程的数据        
SET @PAGESSQL = 'SELECT @TOTALCOUNT = COUNT(*) FROM ' + @TableName
C#取存储过程的数据    
EXEC SP_EXECUTESQL @PAGESSQL, N'@TOTALCOUNT  INT OUT',@TOTALCOUNT OUT
C#取存储过程的数据    
SET @TotalPages = Ceiling(CONVERT(REAL,@TOTALCOUNT/ CONVERT(REAL,@PageSize))--计算页数
C#取存储过程的数据
    SET @SQL='SELECT TOP ' + CAST(@PageSize as varchar(10)) + ' ' + @Columns + ' FROM ' + @TableName + '
C#取存储过程的数据    WHERE ID NOT IN
C#取存储过程的数据    (
C#取存储过程的数据        SELECT TOP 
' + CAST(@PageIndex * @PageSize as varchar(10)) + ' ID
C#取存储过程的数据        FROM 
' + @TableName 
C#取存储过程的数据    
IF @Filters <> ''
C#取存储过程的数据        
SET @SQL = @SQL + ' WHERE ' + @Filters
C#取存储过程的数据    
IF @Orders <> ''
C#取存储过程的数据        
SET @SQL = @SQL + ' ORDER BY ' + @ORDERS
C#取存储过程的数据    
SET @SQL = @SQL + ')'
C#取存储过程的数据    
IF @Filters <> ''
C#取存储过程的数据        
SET @SQL = @SQL + ' AND ' + @Filters
C#取存储过程的数据    
IF @Orders <> ''
C#取存储过程的数据    
SET @SQL = @SQL + ' ORDER BY ' + @ORDERS
C#取存储过程的数据    
EXEC(@SQL)
C#取存储过程的数据
END

下面是C#代码

C#取存储过程的数据using System;
C#取存储过程的数据
using System.Collections.Generic;
C#取存储过程的数据
using System.Linq;
C#取存储过程的数据
using System.Text;
C#取存储过程的数据
C#取存储过程的数据
namespace PagingProcedure

 之前弄错了,执行一次是可以获得结果集,同时也能取出OUTPUT参数的值的。

相关文章: