C#调用SQL Server分页存储过程

以SQL Server2012提供的offset ..rows fetch next ..rows only为例

e.g.

表名:Tab1
----------------------------------
ID	Name
1	tblAttributeGroupDetail
2	tblAttributeGroup
3	tblAttribute
.......
50	tblBRItemTypeAppliesTo
51	tblBRItemProperties
52	tblBRItem
53	tblBRBusinessRule
54	Test

--创建分页存储过程 rTabByCondition

USE [ExampleDB]
GO
if OBJECT_ID('rTabByCondition','P') is not null 
 drop procedure rTabByCondition
GO
create procedure [dbo].[rTabByCondition](
@PageCount int=1			--页数
,@PageSize int=10			--页显示记录数
,@Rowcount int=0 output		--总记录数
)
as
set nocount on;
declare @Rows int;
select * from dbo.Tab1 order by ID  offset (@PageCount-1)*@PageSize rows fetch next @PageSize rows only
set @Rows=@@ROWCOUNT
select @Rowcount=count(*) from dbo.Tab1;
return @Rows
go
declare @i int,@j int
exec @i=[rTabByCondition] @PageCount=6,@PageSize=10,@Rowcount=@j output
select @i as "@Rowcount",@j as "Return_Value"
go

显示结果:

--打开Visual Studio—创建项目—选择【控制台应用程序】

#region Directives
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
#endregion

namespace SQLStoredProcedure2
{
    class Program
    {
        static void Main(string[] args)
        {
            SqlConnection thisConnection = new SqlConnection(@"Server=(Local)\SQL16;Integrated Security=True;Database=ExampleDB");
            thisConnection.Open();
            SqlCommand thisCommend = thisConnection.CreateCommand();
            thisCommend.CommandType = CommandType.StoredProcedure;
            thisCommend.CommandText = "rTabByCondition";
            thisCommend.Parameters.AddWithValue("@PageCount", "6");//页数
            thisCommend.Parameters.AddWithValue("@PageSize", "10");//页显示记录数
            SqlParameter paraOut = thisCommend.Parameters.Add("@Rowcount", SqlDbType.Int);//输出参数定义
            paraOut.Direction = ParameterDirection.Output;
            SqlParameter paraRet = thisCommend.Parameters.Add("return_value", SqlDbType.Int);//返回值
            paraRet.Direction = ParameterDirection.ReturnValue;
            SqlDataReader thisReader = thisCommend.ExecuteReader();
            while (thisReader.Read())
            {
                Console.WriteLine("ID:{0}\tName:{1}", thisReader[0], thisReader[1]);
            }
            thisReader.Close();
            thisConnection.Close();
            Console.WriteLine("Rows:{0};\tReturn_Value:{1};", paraOut.Value, paraRet.Value);
            Console.WriteLine("Program finished,press Enter/Return to continue:");
            Console.ReadLine();
        }
    }
}

显示效果:



 

posted on 2016-05-04 22:26  中國風  阅读(1365)  评论(0编辑  收藏  举报