<%
'プラットフォーム: Win2000+IIS5.0+SQL2000
'追記: 最後のバージョンをアップグレードしました。最後のバージョンは SQL バージョンであり、ストアド プロシージャは使用されませんでした。
'以前のバージョン: [オリジナル] 優れた百万レベルのデータ ページング コード - (長時間使用中) (http://bbs.bccn.net/thread-175543-1-1.html)
'------------------------------------------次のコードはWebページのコード
応答.バッファ = True
Dim SqlLocalName、SqlUsername、SqlPassword、SqlDatabaseName
ディム ConnStr、Conn
'''''''''''''''''''''''' SQL データベース'''''''''''''''''''' ''''''''''''''''''''''''''''''
SqlLocalName =(local)'接続 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-クエリ条件
Dim PageNo、PageSizeX、PageCountX、FieldCount、StrWhere
'割り当てを実行する
PageNo=trim(Request.Querystring(PageNo))
PageSizeX=30' はページング サイズを定義します
if isnumeric(PageNo) または PageNo= then'Page 値がない場合、値を初期化します
ページ番号=abs(ページ番号)
PageNo=0 の場合は PageNo=1
それ以外
ページ番号=1
終了する場合
StrWhere=(ClassCode=0101 and Hits>20)'ここでの文字の長さに注意してください。
set recom =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)
set rs = recom.execute()
もし rs.eof なら
set rs=nothing : set recom=nothing: Conn.Close : set Conn=nothing
response.write <script LANGUAGE='javascript'>alert('現在レコードが見つかりません。戻ってもう一度お試しください!');history.go(-1);</script>
応答.終了
終了する場合
'表示データ
rs.eof ではないときに実行します
response.write&rs(Title)& 時間を追加:&rs(AddTime)&<br/>
rs.movenext
ループ
'レコードの総数を取得し、ページ数を計算します
set rs = rs.NextRecordset
rs(countx) > 0 の場合
FieldCount=rs(カウントx)
それ以外
フィールド数=0
終了する場合
if (FieldCount mod PageSizeX)>0 then
PageCountX=((FieldCount - (FieldCount mod PageSizeX))/ PageSizeX)+1
それ以外
ページ数X= (フィールド数 / ページサイズX)
終了する場合
'関連リソースを閉じて解放する
set rs=nothing : set recom=nothing: Conn.Close : set Conn=nothing
' ページングを表示
PageNo<=1 の場合、
Response.Write <font color='#FF0000'>[ホーム] [前のページ]</font>
それ以外
Response.Write[<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 の場合
Response.Write <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>]
終了する場合
Response.Write[ページ <font color=red>&PageNo&</font>/合計 <font color=red> & PageCountX &</font>]
Response.Write [合計<font color=red>&FieldCount&</font> 項目<font color=red>& PageSizeX & </font> 項目/ページ]
Response.Write 移動 & <input id=zhuanpage name=zhuanpage size=2 value=&PageNo&> & ページ <input type=submit value=Go onclick=gotoPage()>
Response.Write</td></tr></table>
Response.Write<script>function gotoPage(){var pg=document.getElementById('zhuanpage').value;if(isNaN(pg)||pg>&PageCountX&||pg<0){window.alert('正しい ページ番号を入力してください。正の整数のみを入力できます。&PageCountX&');return より大きくすることはできません。 false;}else{window.location.href='?PageNo='+document.getElementById('zhuanpage').value+'';return true;}}</script>
%>
'------------------------------------------------ - ------次のコードはストアド プロシージャ コードです。
CREATE プロシージャニュース_クラス
--数百万ページにわたる情報ニュース
(
@StrWhere varchar(100)、
@PageSize int、
@PageIndexint
)
として
declare@strSQLvarchar(2000) -- メインステートメント
declare@strCountSQL varchar(2000) -- 合計レコードのメイン ステートメント
declare@strTmpvarchar(1000) -- 一時変数
Set @strTmp = Select top + str(@PageSize) + Title,AddTime from Tb_News -- 複数のフィールドを読み取るには、いくつかのフィールドが必要であることに注意してください。
if @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 の説明による順序付け
set @strCountSQL=Tb_News Where +@StrWhere+ から countx として count(ID) を選択
終わり
それ以外
始める
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
set @strCountSQL=Tb_News から countx として count(ID) を選択
終わり
@PageIndex = 1の場合
if @StrWhere<>''
始める
Set @strSQL=@strTmp + Where +@StrWhere+ ID の説明で並べ替えます
終わり
それ以外
始める
@strSQL=@strTmp + ID による順序の説明を設定します。
終わり
実行(@strSQL)
実行(@strCountSQL)
行く