<%
'플랫폼: Win2000+IIS5.0+Sql2000
'추신: 마지막 버전이 업그레이드되었습니다. 마지막 버전은 SQL 버전이었고 저장 프로시저가 사용되지 않았습니다.
'이전 버전 : [원본] 우수한 백만급 데이터 페이징 코드 - (오랜 시간 동안 사용 중) (http://bbs.bccn.net/thread-175543-1-1.html)
'-------------------다음 코드는 웹페이지 코드
응답.버퍼 = 참
희미한 SqlLocalName, SqlUsername, SqlPassword, SqlDatabaseName
희미한 ConnStr, Conn
''''''''''''''''''''''''' SQL 데이터베이스'''''''''''''' '''''' '''''''''''''''''''''''''''''''
SqlLocalName =(로컬)'연결 IP [로컬(로컬) 외부 IP]
SqlUsername=sa '데이터베이스 사용자 이름
SqlPassword=XXXXXX '사용자 비밀번호
SqlDatabaseName=NewsTable '데이터베이스 이름
ConnStr = 공급자=Sqloledb;사용자 ID= & SqlUsername & ; 비밀번호= & SqlPassword & ; 초기 카탈로그 = & SqlDatabaseName & ;
'''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''' '
오류 발생 시 다음 재개
Conn=Server.CreateObject(ADODB.Connection)로 설정합니다.
Conn.open ConnStr
오류가 발생한 경우
오류가 발생했습니다.지우기
SetConn=아무것도 없음
Response.Write <div style='font-size:14px;color=#ff0000' align='center'>데이터베이스 연결 오류입니다. 데이터베이스 연결 문자열을 확인하세요</div>
응답.종료
종료 조건
'이 클래스는 페이징에 대해 가능한 모든 조건을 고려하지 않고 인스턴스화 코드를 수행합니다. 이 카테고리는 참고용입니다.
'------------------------------------------------ - -------------------------------------------------
'PageNo-현재 페이지;PageSizeX-페이지 크기;PageCountX-총 페이지 수;FieldCount-총 레코드 수;StrWhere-쿼리 조건
희미한 PageNo, PageSizeX, PageCountX, FieldCount, StrWhere
'과제 수행
PageNo=trim(Request.Querystring(PageNo))
PageSizeX=30'은 페이징 크기를 정의합니다.
if isnumeric(PageNo) 또는 PageNo= then'페이지 값이 없으면 값을 초기화합니다.
페이지번호=abs(페이지번호)
PageNo=0이면 PageNo=1이면
또 다른
페이지번호=1
종료하면
StrWhere=(ClassCode=0101 and Hits>20)'참고, 여기서 문자 길이에 주의하세요.
권장 설정 = server.createobject(adodb.command)
recom.activeconnection = 콘
recom.commandtype = 4
recom.commandtext = News_Class
recom.Parameters.Appendrecom.CreateParameter(@StrWhere,202,1,100,StrWhere)
recom.Parameters.Appendrecom.CreateParameter(@PageSize,3,1,,PageSizeX)
recom.Parameters.Appendrecom.CreateParameter(@PageIndex,3,1,,PageNo)
rs = recom.execute() 설정
만약 rs.eof라면
rs=nothing 설정: recom=nothing 설정: Conn.Close: Conn=nothing 설정
response.write <script LANGUAGE='javascript'>alert('현재 레코드를 찾을 수 없습니다. 돌아가서 다시 시도하십시오!');history.go(-1);</script>
응답.끝
종료하면
'데이터 표시
rs.eof가 아닌 동안 수행
response.write&rs(Title)& 시간 추가:&rs(AddTime)&<br/>
rs.movenext
고리
'총 레코드 수를 구하고 페이지 수를 계산합니다.
rs = rs.NextRecordset 설정
rs(countx) > 0이면
필드카운트=rs(countx)
또 다른
필드카운트=0
종료하면
if (FieldCount mod PageSizeX)>0 then
PageCountX=((FieldCount - (FieldCount 모드 PageSizeX))/ PageSizeX)+1
또 다른
PageCountX= (FieldCount / PageSizeX)
종료하면
'관련 리소스 종료 및 해제
rs=nothing 설정: recom=nothing 설정: Conn.Close: Conn=nothing 설정
'페이징 표시
PageNo<=1이면
응답.쓰기 <font color='#FF0000'>[홈] [이전 페이지]</font>
또 다른
응답.쓰기[<a href='?PageNo=1' target='_self' title='Homepage'><font color='#FF0000'>홈페이지</font></a>]
Response.Write[<a href='?PageNo=&(PageNo-1)&' target='_self' title='이전 페이지'><font color='#FF0000'>이전 페이지</font></a >]
종료하면
PageNo>=PageCountX이면
응답.쓰기 <font color='#FF0000'>[다음 페이지] [마지막 페이지]</font>
또 다른
Response.Write[<a href='?PageNo=&(PageNo+1)&'target='_self' title='다음 페이지'><font color='#FF0000'>다음 페이지</font>< /a >]
Response.Write[<a href='?PageNo=&PageCountX&' target='_self' title='마지막 페이지'><font color='#FF0000'>마지막 페이지</font></a>]
종료하면
응답.쓰기[페이지 <font color=red>&PageNo&</font>/total <font color=red> & PageCountX &</font>]
응답.쓰기 [총<font color=red>&FieldCount&</font> 항목<font color=red>& PageSizeX & </font> 항목/페이지]
응답.쓰기 & <input id=zhuanpage name=zhuanpage size=2 value=&PageNo&> & 페이지 <input type=submit value=Go onclick=gotoPage()>로 이동
응답.쓰기</td></tr></table>
Response.Write<script>function gotoPage(){var pg=document.getElementById('zhuanpage').value;if(isNaN(pg)||pg>&PageCountX&||pg<0){window.alert('Please be 올바른 페이지 번호를 입력하세요. 페이지 번호는 &PageCountX&')보다 클 수 없습니다. false;}else{window.location.href='?PageNo='+document.getElementById('zhuanpage').value+'';return true;}}</script>
%>
'------------------------------------------------ - ------다음 코드는 저장 프로시저 코드입니다.
CREATE 프로시저News_Class
--정보 뉴스 백만 수준 페이징
(
@StrWhere varchar(100),
@PageSize 정수,
@PageIndexint
)
처럼
Declar@strSQLvarchar(2000) -- 주요 명령문
Declar@strCountSQL varchar(2000) -- 총 레코드 주 문
Declar@strTmpvarchar(1000) -- 임시 변수
Set @strTmp = Select top + str(@PageSize) + Title,AddTime from Tb_News --여러 필드를 읽으려면 여러 필드가 필요하다는 점에 유의하세요.
@StrWhere<>''인 경우
시작하다
@strSQL=@strTmp + where ID < (select min(ID) from (select top + str((@PageIndex-1)*@PageSize)+ ID from Tb_News Where +@StrWhere+order by ID desc)as tblTmp ) +@StrWhere+ ID 설명으로 주문
@strCountSQL=select count(ID)를 Tb_News Where +@StrWhere+에서 countx로 선택
끝
또 다른
시작하다
Set @strSQL=@strTmp + where ID < (select min(ID) from (select top + str((@PageIndex-1)*@PageSize)+ ID from Tb_News order by ID desc)as tblTmp ) order by ID desc
@strCountSQL=Tb_News에서 countx로 count(ID) 선택
끝
@PageIndex = 1인 경우
@StrWhere<>''인 경우
시작하다
@strSQL=@strTmp + Where +@StrWhere+ ID 설명별 순서로 설정
끝
또 다른
시작하다
@strSQL=@strTmp + ID 기준 순서 설정 desc
끝
exec(@strSQL)
exec(@strCountSQL)
가다