C#呼叫SQL Server分頁儲存過程
阿新 • • 發佈:2019-01-09
以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
--建立分頁儲存過程 rTabByConditionUSE [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(); } } }