asp.net 安全、實(shí)用、簡單的大容量存儲過程分頁第1/2頁
這個分頁主要優(yōu)點(diǎn)如下:
1、大容量下的數(shù)據(jù)分頁,我的測試數(shù)據(jù)是520W。
2、我結(jié)合aspnetpager控件,使得使用起來更加方便。
3、為了結(jié)構(gòu)清晰,實(shí)用3層。
4、安全,你就放心的用吧。SQL注入的問題在這里你可以放心了。網(wǎng)上有文章說只要存儲過程是用sql拼接的就存在sql注入的問題,并且直接在sql查詢分析器中測試了注入的情況。其實(shí)是不對的,采用存儲過程和參數(shù)化的提交語句并沒有sql注入的問題。因?yàn)樗M(jìn)數(shù)據(jù)庫的時候會有替換的過程。
準(zhǔn)備工作:
1、直接使用一個DB庫,數(shù)據(jù)訪問層基類,用它返回一個dataset對象,使用的時候我們只需要類似下面的語句就可以返回一個dataset對象。
sosuo8.DBUtility.DbHelperSQL.RunProcedure("pagination",parameter,"userinfo");
pagination是我在網(wǎng)上找的存儲過程,我進(jìn)行了修改的,主要是添加輸出總記錄數(shù)。這里總記錄數(shù)也特意說一下,一般我們都是使用類似下面的語句:
select count(*) from sosuo8data
這里我又要說兩句,網(wǎng)上有網(wǎng)友說使用count(某列),例如count(userName)會比count(*)快也是不對,如果找的列不對,那么并不會比count(*)快。而count(*)會自動幫我們查找可以實(shí)現(xiàn)最快統(tǒng)計(jì)的那列,而其實(shí)在使用中,一般就是我們的那個主鍵id,count(id)是最快的。
2、建立數(shù)據(jù)庫data_test,建立兩個表:
(1)、userinfo這個表用來放數(shù)據(jù)。
CREATE TABLE [dbo].[userinfo](
[id] [int] IDENTITY(1,1) NOT NULL,
[userName] [nchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[userWebName] [nchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[createDate] [datetime] NULL CONSTRAINT [DF_userinfo_createDate] DEFAULT (getdate()),
CONSTRAINT [PK_userinfo] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
id是自遞增,且是聚合索引。OK?開始往數(shù)據(jù)庫中添加520W條記錄:
--by 阿會楠 2009-4-5
set identity_insert userinfo on -- 標(biāo)識可以插入自遞增列
declare @count int
declare @date datetime
set @count=1
set @date = '2009-4-5 00:00:00'
while @count<=5200000
begin
insert into userinfo(id,userName,userWebName,createDate) values(@count,'阿會楠','sosuo8.com',@date)
set @count=@count+1
set @date=@date+'00:00:01'--加一秒,避免重復(fù),否則會造成分頁不準(zhǔn)確的情況,排序的字段切忌不要出現(xiàn)過多重復(fù)值
end
set identity_insert userinfo off
如果你的電腦配置比較一般,千萬不要嘗試,否則可能會當(dāng)機(jī);如果沒當(dāng)機(jī),那耐心等下,插入這么多條記錄需要一點(diǎn)時間。
(2)tmp表用來存放無搜索條件時的總記錄數(shù)。這里我要說下,為什么需要一個表用來專門存放總記錄數(shù),總記錄數(shù)你可以在后臺每隔一段時間就去更新一次,把最新的總記錄數(shù)寫進(jìn)去。否則的話,520W的記錄你每次都要用count(id)那么耗費(fèi)的時間也不少。
建表的語句如下:
CREATE TABLE [dbo].[tmp](
[id] [int] IDENTITY(1,1) NOT NULL,
[rowCount_tmp] [int] NULL,
[table_tmp] [varchar](255) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_tmp] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
這里不得不提一下,為什么只要取得表的行總記錄數(shù),而不在存儲過程里面把分頁都算好。因?yàn)槲覀兙蛯⒉捎胊spnetpager這個控件,這個控件我們只需要傳入3個值,函數(shù)定義如下:
public DataSet GetList(int PageIndex, string strWhere,ref int rowCount)
PageIndex:當(dāng)前頁,對應(yīng)aspnetpager中的CurrentPageIndex
strWhere:搜索的條件,這篇文章將不重點(diǎn)講搜索部分。所以代碼中用string.Empty,大容量下的數(shù)據(jù)搜索那需要另寫一篇文章來說明。
rowCount:總記錄數(shù),由存儲過程重新返回。
- 一個Asp.Net的顯示分頁方法 附加實(shí)體轉(zhuǎn)換和存儲過程 帶源碼下載
- asp.net利用存儲過程和div+css實(shí)現(xiàn)分頁(類似于博客園首頁分頁)
- asp.net 分頁存儲過程實(shí)例剖析心得
- asp.net 數(shù)據(jù)訪問層 存儲過程分頁語句
- AspNetPager分頁控件 存儲過程
- asp.net結(jié)合aspnetpager使用SQL2005的存儲過程分頁
- asp.net安全、實(shí)用、簡單的大容量存儲過程分頁
- asp.net SQL存儲過程分頁
- asp.net安全、實(shí)用、簡單的大容量存儲過程分頁
- asp.net 結(jié)合mysql存儲過程進(jìn)行分頁代碼
- 三層+存儲過程實(shí)現(xiàn)分頁示例代碼
相關(guān)文章
CodeFirst從零開始搭建Asp.Net Core2.0網(wǎng)站
這篇文章主要為大家詳細(xì)介紹了CodeFirst從零開始搭建Asp.Net Core2.0網(wǎng)站的詳細(xì)過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07創(chuàng)建一個完整的ASP.NET Web API項(xiàng)目
ASP.NET Web API具有與ASP.NET MVC類似的編程方式,ASP.NET Web API不僅僅具有一個完全獨(dú)立的消息處理管道,而且這個管道比為ASP.NET MVC設(shè)計(jì)的管道更為復(fù)雜,功能也更為強(qiáng)大。下面創(chuàng)建一個簡單的Web API項(xiàng)目,需要的朋友可以參考下2015-10-10asp.net 未能加載文件或程序集“XXX”或它的某一個依賴項(xiàng)。試圖加載格式不正確的程序。
運(yùn)行asp.net后提示未能加載文件或程序集“XXX”或它的某一個依賴項(xiàng)。試圖加載格式不正確的程序。2011-07-07ASP.NET網(wǎng)站聊天室的設(shè)計(jì)與實(shí)現(xiàn)(第3節(jié))
這篇文章主要介紹了ASP.NET網(wǎng)站聊天室的設(shè)計(jì)與實(shí)現(xiàn),了解Session、Application對象的屬性和事件,并且掌握利用它們在頁面間保存和傳遞數(shù)據(jù)的方法,需要的朋友可以參考下2015-08-08asp.net模板引擎Razor調(diào)用外部方法用法實(shí)例
這篇文章主要介紹了asp.net模板引擎Razor調(diào)用外部方法用法,實(shí)例分析了Razor調(diào)用外部方法的相關(guān)使用技巧,需要的朋友可以參考下2015-06-06asp.net Grid 導(dǎo)出Excel實(shí)現(xiàn)程序代碼
看了FineUI中的將Grid導(dǎo)出為Excel的實(shí)現(xiàn)方法,實(shí)際上是可以非常簡單??磥砗茈y的問題,變換一種思路就可以非常簡單2012-12-12.net?core?api接口JWT方式認(rèn)證Token
本文詳細(xì)講解了.net?core?api接口JWT方式認(rèn)證Token,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12關(guān)于c#連接ftp進(jìn)行上傳下載實(shí)現(xiàn)原理及代碼
ftp上傳下載想必大家已經(jīng)很熟悉了,關(guān)于c#連接ftp進(jìn)行上傳下載,一些新手朋友應(yīng)該會很陌生吧,本文將帶你解決困惑,感興趣的朋友可以了解下哦,就當(dāng)鞏固知識了2013-01-01.NET使用.NET Core CLI開發(fā)應(yīng)用程序
這篇文章主要為大家詳細(xì)介紹了.NET使用.NET Core CLI開發(fā)應(yīng)用程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08