1. 程式人生 > >C#呼叫SQL Server分頁儲存過程

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 @
[email protected]
@ROWCOUNT select @Rowcount=count(*) from dbo.Tab1; return @Rows go declare @i int,@j int exec @i=[rTabByCondition] @PageCount=6,@PageSize=10,@[email protected] 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();
        }
    }
}
顯示效果: