유니버설 페이지 저장 프로세스 사용

동료가 쓴 유니버설 페이지 저장 프로세스를 보면 괜찮을 것 같아서 여러분께 공유합니다.
1. 저장 프로세스
USE 
[test]
GO
/****** Object:  StoredProcedure [dbo].[ads_GetAll]    Script Date: 07/04/2013 16:00:48 ******/
SET 
ANSI_NULLS 
ON
GO
SET 
QUOTED_IDENTIFIER 
ON
GO
ALTER 
PROCEDURE 
[dbo]

[ads_GetAll]
   
-- 
공통 페이지 나누기 저장 프로세스
@TableName 
varchar 
(
50
), 
         
--
표명
@Fields 
varchar 
(
5000
), 
     
--
필드 이름
(
모든 필드
*)
@OrderField 
varchar 
(
5000
), 
         
--
정렬 필드

반드시... 해야 한다
!
다중 필드 지원
)
@sqlWhere 
varchar 
(
5000
), 
--
조건문

... 할 필요가 없다
where)
@pageSize 
int 
,
                     
--
페이지당 몇 개의 기록
@pageIndex 
int 


,
             
--
현재 페이지로 지정
@COUNT 
int 
output
             
--
전체 페이지 반환
as
begin
     
Begin 
Tran 
--
트랜잭션 시작
     
Declare 
@sql 
nvarchar

4000
);
     
Declare 
@totalRecord 
int

   
     
--
총기록수를 계산하다
        
     
if 
(
@SqlWhere 
=
'' 
or 
@sqlWhere 
=NULL)
         
set 
@sql 

'select @totalRecord = count(*) from ' 

@TableName
     
else
         
set 
@sql 

'select @totalRecord = count(*) from ' 

@TableName 

' where ' 

@sqlWhere
     
EXEC 
sp_executesql 
@sql

N'@totalRecord int OUTPUT'
,
@totalRecord 
OUTPUT
--
총기록수를 계산하다
      
   
     
--
총 페이지 수 계산
     
select 
@COUNT 
=
CEILING
(( 
@totalRecord
+
0.0 
)/
@PageSize
)
     
if 
(
@SqlWhere 
=
'' 
or 
@sqlWhere 
=NULL)
         
set 
@sql 

'Select * FROM (select ROW_NUMBER() Over(order by ' 

@OrderField 

') as rowId,' 

@Fields 

' from ' 

@TableName
     
else
         
set 
@sql 

'Select * FROM (select ROW_NUMBER() Over(order by ' 

@OrderField 

') as rowId,' 

@Fields 

' from ' 

@TableName 

' where ' 

@SqlWhere
   
       
   
     
--
처리 페이지 수 범위 초과 상황
     
if 
@PageIndex 
<=
0
         
Set 
@pageIndex 

1
   
     
if 
@pageIndex 
>
@COUNT
         
Set 
@pageIndex 

@COUNT
      
--
시작 및 끝 처리
     
Declare 
@StartRecord 
int
     
Declare 
@EndRecord 
int
   
     
set 
@StartRecord 

(
@pageIndex

1
)*
@PageSize 

1
     
set 
@EndRecord 

@StartRecord 

@pageSize 

1
     
--
계속 합성
sql 
문장
     
set 
@Sql 

@Sql 

') as ' 

@TableName 

' where rowId between ' 

Convert
(
varchar 
(
50
), 
@StartRecord


' and ' 
+
   
Convert
(
varchar 
(
50
), 
@EndRecord
)
   
     
Exec
(
@Sql 
)
     
---------------------------------------------------
     
If 
@@Error 
<> 
0
       
Begin
         
RollBack 
Tran
         
Return 

1
       
End
      
Else
       
Begin
         
Commit 
Tran
         
Return 
@totalRecord 
---
총 레코드 반환
       
End
   
end
2. 데이터 처리 층에서:
        /// <summary>          ///           /// </summary>          /// <param name="pageSize"> </param>          /// <param name="count"> </param>          /// <returns></returns>          public   List<Ads_Analyst> ads_Analyst_GetAll( int   pageIndex,  int   pageSize,  string   where,  out   int   count)          {              List<Ads_Analyst> list =  new   List<Ads_Analyst>();              IDataReader reader =  null ;              IDataParameter[] parameters =                                Helper.GetParameter( "@COUNT" , DbType.Int32, ParameterDirection.Output),                 Helper.GetParameter( "@ReturnValue" ,DbType.Int32,ParameterDirection.ReturnValue),                 Helper.GetParameter( "@PAGESIZE" , DbType.Int16,pageSize),                 Helper.GetParameter( "@PAGEINDEX" , DbType.Int16,pageIndex),                 Helper.GetParameter( "@sqlWhere" , DbType.String,where),                 Helper.GetParameter( "@TableName" , DbType.String, "ads_Analyst" ),                 Helper.GetParameter( "@Fields" , DbType.String, "[ID],[AnalystName],[Picture],[JobTitle],[Trade],[Introduction],[Status],[AddTime],[EditTime]" ),                 Helper.GetParameter( "@OrderField" , DbType.String, "AddTime desc" ),              };              try              {                  reader = Helper.ExecuteReader                  (                      ConnectToADS,                      CommandType.StoredProcedure,                      "ads_GetAll" ,                      parameters                  );                  while   (reader.Read())                  {                      Ads_Analyst m =  new   Ads_Analyst();                      m.ID = Field.GetInt32(reader,  "ID" );                      m.AnalystName = Field.GetString(reader,  "AnalystName" );                      m.Picture = Field.GetString(reader,  "Picture" );                      m.JobTitle = Field.GetString(reader,  "JobTitle" );                      m.Trade = Field.GetString(reader,  "Trade" );                      m.Introduction = Field.GetString(reader,  "Introduction" );                      m.AddTime = Field.GetDateTime(reader,  "AddTime" );                      m.EditTime = Field.GetDateTime(reader,  "EditTime" );                      m.Status = Field.GetInt32(reader,  "Status" );                      list.Add(m);                  }                  reader.Close();                  count = ( int )parameters[1].Value;                  return   list;              }              catch   (System.Exception ex)              {                  Logger.Error( " " , ex);                  throw   new   DataAccessException( " " , ex);              }              finally              {                  if   (reader !=  null )                  {                      reader.Close();                  }              }          }

좋은 웹페이지 즐겨찾기