Asp.net 通用萬級數(shù)據(jù)分頁代碼[修正下載地址]
很久以前,就想做一個通用點的數(shù)據(jù)分頁組件,但苦于一直沒有充足的時間,所以遲遲沒有實現(xiàn)(當(dāng)然,主要是因為有一定的難度,要處理視圖狀態(tài),回傳事件,自繪等...),"十一"期間,陪女朋友去了躺"湘西",白天游山玩水,晚上無事,吃吃當(dāng)?shù)氐囊瓜?無聊之際,google了一把Oracle的數(shù)據(jù)分頁,竟然沒有一個完整的關(guān)于Asp.net + Oracle數(shù)據(jù)分頁的例子,要不就是有版本問題,索性決定自己弄一個.
2.環(huán)境
IDE;vs2008+asp.net2.0 or 3.0+Oracle9i
Oracle測試數(shù)據(jù);41萬多條
帶寬;網(wǎng)通說是有2M的帶寬,其實TNND只有100多KB
3.原理
利用Oracle9i的RowNum獲取我們想要的數(shù)據(jù),如圖3.1
public IEnumerable GetPageSqlByOracle(string sql, int startRowIndex, int maximumRows, string orderBy)
{
string sqlFormat = string.Format("select * from (select rownum rn, pageTable.* from {0} pageTable where rownum <={1}) where rn>{2}", sql, startRowIndex + maximumRows, startRowIndex);
return ydjwOracleConn.RetriveDataSet(sqlFormat).Tables[0].DefaultView;
}
startRowIndex表示開始索引,maximumRows表示要獲取的每頁記錄數(shù)目.
然后把分頁后的數(shù)據(jù)綁定到ObjectDataSource組件,如下圖
4.效果
4.1 支持多排序,比如時間,比如身份證明號碼等
4.2 41萬多條數(shù)據(jù)
4.3 單條件查詢,第一次用時1.547秒
4.4 第二次,用時1.515秒
第三次差不多,就不貼了.
4.5 看看不帶條件的查詢,一次把41萬條數(shù)據(jù)全部查詢出來使用的時間
可以看到,不帶條件查詢41萬條數(shù)據(jù),第一次用時1.265秒.
4.6 可以看到不帶條件查詢41萬條數(shù)據(jù),第二次用時1.156秒
4.7 可用SqlServer,或者Db2等數(shù)據(jù)庫代替,只需要修改 圖3.1獲取數(shù)據(jù)的方法,其他地方不用動.
5.需要注意的地方
5.1 記得數(shù)據(jù)量上萬時,一定要加索引,否則要等得"花謝花開".
5.2 ObjectDataSource的所有參數(shù)名稱,一定要和綁定的方法參數(shù)名稱,順序一致.
5.3 能用緩存的,盡量用緩存
5.4 SqlServer的分頁算法,就不說了,替換一下圖3.1的方法就行
5.5 因為數(shù)據(jù)庫文件實在太大,不方便下載,有興趣的朋友自己弄一張表就OK,加上webconfig中的數(shù)據(jù)庫連接配置
6.下載
測試Demo下載 http://xiazai.jb51.net/200810/yuanma/TestDataBindControlls.rar 【已修正】
7.后話
該說的都說了,希望對大家能有所幫助啟發(fā),還有就是此測試Demo還沒有加緩存,有興趣的朋友可以加上,歡迎大家討論,批評,指導(dǎo)...
相關(guān)文章
ASP.NET Core中如何使用表達(dá)式樹創(chuàng)建URL詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core中如何使用表達(dá)式樹創(chuàng)建URL的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10asp.net access web.config denied
如果出現(xiàn)這個問題,最好首先檢查一下ASPNET的帳號,是否有訪問權(quán)限。2009-04-04ASPNET按鈕只執(zhí)行客戶端代碼不回送頁面實現(xiàn)思路
有些時候需要實現(xiàn)只執(zhí)行客戶端代碼不回送頁面,不過很多童鞋們不清楚如何實現(xiàn)呢,還好本文的出現(xiàn)將解決你的困擾,感興趣的朋友可以了解下,或許對你有所幫助2013-02-02asp.net中Fine Uploader文件上傳組件使用介紹
最近在處理后臺數(shù)據(jù)時需要實現(xiàn)文件上傳.考慮到對瀏覽器適配上采用Fine Uploader. Fine Uploader 采用ajax方式實現(xiàn)對文件上傳.同時在瀏覽器中直接支持文件拖拽[對瀏覽器版本有要求類似IE版本必須是9或是更高的IE10].2013-01-01DataGrid 動態(tài)添加模板列 實現(xiàn)代碼
模版控件能讓用戶幾乎不用花費任何時間就創(chuàng)建出復(fù)雜的用戶界面. Asp.net有很多控件都使用了模版技術(shù)(DataGrid就是一個例子). 而這些控件都工作得很好, 通常, 模版可以被保存為ascx文件以增加復(fù)用性. 很有可能, 事前你是不知道你的控件是怎么布局的, 而且你需要動態(tài)的添加一些模版以應(yīng)付不同的事件.2009-04-04