asp.net安全、實(shí)用、簡(jiǎn)單的大容量存儲(chǔ)過(guò)程分頁(yè)第1/2頁(yè)
這個(gè)分頁(yè)主要優(yōu)點(diǎn)如下:
1、大容量下的數(shù)據(jù)分頁(yè),我的測(cè)試數(shù)據(jù)是520W。
2、我結(jié)合aspnetpager控件,使得使用起來(lái)更加方便。
3、為了結(jié)構(gòu)清晰,實(shí)用3層。
4、安全,你就放心的用吧。SQL注入的問(wèn)題在這里你可以放心了。網(wǎng)上有文章說(shuō)只要存儲(chǔ)過(guò)程是用sql拼接的就存在sql注入的問(wèn)題,并且直接在sql查詢(xún)分析器中測(cè)試了注入的情況。其實(shí)是不對(duì)的,采用存儲(chǔ)過(guò)程和參數(shù)化的提交語(yǔ)句并沒(méi)有sql注入的問(wèn)題。因?yàn)樗M(jìn)數(shù)據(jù)庫(kù)的時(shí)候會(huì)有替換的過(guò)程。
準(zhǔn)備工作:
1、直接使用一個(gè)DB庫(kù),數(shù)據(jù)訪問(wèn)層基類(lèi),用它返回一個(gè)dataset對(duì)象,使用的時(shí)候我們只需要類(lèi)似下面的語(yǔ)句就可以返回一個(gè)dataset對(duì)象。
sosuo8.DBUtility.DbHelperSQL.RunProcedure("pagination",parameter,"userinfo");
pagination是我在網(wǎng)上找的存儲(chǔ)過(guò)程,我進(jìn)行了修改的,主要是添加輸出總記錄數(shù)。這里總記錄數(shù)也特意說(shuō)一下,一般我們都是使用類(lèi)似下面的語(yǔ)句:
select count(*) from sosuo8data
這里我又要說(shuō)兩句,網(wǎng)上有網(wǎng)友說(shuō)使用count(某列),例如count(userName)會(huì)比count(*)快也是不對(duì),如果找的列不對(duì),那么并不會(huì)比count(*)快。而count(*)會(huì)自動(dòng)幫我們查找可以實(shí)現(xiàn)最快統(tǒng)計(jì)的那列,而其實(shí)在使用中,一般就是我們的那個(gè)主鍵id,count(id)是最快的。
2、建立數(shù)據(jù)庫(kù)data_test,建立兩個(gè)表:
(1)、userinfo這個(gè)表用來(lái)放數(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?開(kāi)始往數(shù)據(jù)庫(kù)中添加520W條記錄:
--by 阿會(huì)楠 2009-4-5
set identity_insert userinfo on -- 標(biāo)識(shí)可以插入自遞增列
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,'阿會(huì)楠','sosuo8.com',@date)
set @count=@count+1
set @date=@date+'00:00:01'--加一秒,避免重復(fù),否則會(huì)造成分頁(yè)不準(zhǔn)確的情況,排序的字段切忌不要出現(xiàn)過(guò)多重復(fù)值
end
set identity_insert userinfo off
如果你的電腦配置比較一般,千萬(wàn)不要嘗試,否則可能會(huì)當(dāng)機(jī);如果沒(méi)當(dāng)機(jī),那耐心等下,插入這么多條記錄需要一點(diǎn)時(shí)間。
(2)tmp表用來(lái)存放無(wú)搜索條件時(shí)的總記錄數(shù)。這里我要說(shuō)下,為什么需要一個(gè)表用來(lái)專(zhuān)門(mén)存放總記錄數(shù),總記錄數(shù)你可以在后臺(tái)每隔一段時(shí)間就去更新一次,把最新的總記錄數(shù)寫(xiě)進(jìn)去。否則的話,520W的記錄你每次都要用count(id)那么耗費(fèi)的時(shí)間也不少。

建表的語(yǔ)句如下:
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ù),而不在存儲(chǔ)過(guò)程里面把分頁(yè)都算好。因?yàn)槲覀兙蛯⒉捎胊spnetpager這個(gè)控件,這個(gè)控件我們只需要傳入3個(gè)值,函數(shù)定義如下:
public DataSet GetList(int PageIndex, string strWhere,ref int rowCount)
PageIndex:當(dāng)前頁(yè),對(duì)應(yīng)aspnetpager中的CurrentPageIndex
strWhere:搜索的條件,這篇文章將不重點(diǎn)講搜索部分。所以代碼中用string.Empty,大容量下的數(shù)據(jù)搜索那需要另寫(xiě)一篇文章來(lái)說(shuō)明。
rowCount:總記錄數(shù),由存儲(chǔ)過(guò)程重新返回。
- asp.net安全、實(shí)用、簡(jiǎn)單的大容量存儲(chǔ)過(guò)程分頁(yè)
- asp.net 結(jié)合mysql存儲(chǔ)過(guò)程進(jìn)行分頁(yè)代碼
- asp.net 存儲(chǔ)過(guò)程調(diào)用
- 在ASP.NET中用存儲(chǔ)過(guò)程執(zhí)行SQL語(yǔ)句
- asp.net sql存儲(chǔ)過(guò)程
- asp.net利用存儲(chǔ)過(guò)程和div+css實(shí)現(xiàn)分頁(yè)(類(lèi)似于博客園首頁(yè)分頁(yè))
- asp.net結(jié)合aspnetpager使用SQL2005的存儲(chǔ)過(guò)程分頁(yè)
- ASP.NET 獲取存儲(chǔ)過(guò)程返回值的實(shí)現(xiàn)代碼
- asp.net中IDataParameter調(diào)用存儲(chǔ)過(guò)程的實(shí)現(xiàn)方法
- asp.net中調(diào)用存儲(chǔ)過(guò)程的方法
相關(guān)文章
Asp.Net防止刷新重復(fù)提交數(shù)據(jù)的辦法
最近在用Asp.Net編寫(xiě)點(diǎn)東西時(shí)遇到個(gè)問(wèn)題:即用戶(hù)在提交表單后按刷新就會(huì)重復(fù)提交數(shù)據(jù),即所謂的“刷新重復(fù)提交”的問(wèn)題。2013-03-03ASP.NET中后臺(tái)注冊(cè)js腳本使用的方法對(duì)比
接下來(lái)為大家介紹下使用Page.ClientScript.RegisterClientScriptBlock 和Page.ClientScript.RegisterStartupScript:區(qū)別2013-04-04.Net 調(diào)用存儲(chǔ)過(guò)程取到return的返回值
存儲(chǔ)過(guò)程只能返回 int 類(lèi)型,如果返回一個(gè)字符串 ,將會(huì)報(bào)類(lèi)型轉(zhuǎn)化錯(cuò)誤,下面以示例介紹下如何取到return的值,需要的朋友可以參考下2014-08-08ASP.NET?Core?MVC自定義Tag?Helpers用法介紹
這篇文章介紹了ASP.NET?Core?MVC自定義Tag?Helpers的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02MVC+EasyUI+三層新聞網(wǎng)站建立 實(shí)現(xiàn)登錄功能(四)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第四篇,教大家實(shí)現(xiàn)登錄功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07基于.net core微服務(wù)的另一種實(shí)現(xiàn)方法
這篇文章主要給大家介紹了基于.net core微服務(wù)的另一種實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07ASP.NET Core 2.0 使用支付寶PC網(wǎng)站支付實(shí)現(xiàn)代碼
這篇文章主要介紹了ASP.NET Core 2.0 使用支付寶PC網(wǎng)站支付實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-10-10ASP.NET Core使用GraphQL第一章之Hello World
這篇文章主要給大家介紹了關(guān)于ASP.NET Core使用GraphQL第一章之Hello World的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11Asp.Net網(wǎng)站優(yōu)化系列之?dāng)?shù)據(jù)庫(kù)的優(yōu)化措施與索引優(yōu)化方法
索引的作用就類(lèi)似于書(shū)的目錄,書(shū)的目錄會(huì)按照章節(jié)的順序排列,會(huì)指想某一張的位置。這樣如果在一本數(shù)百頁(yè)的書(shū)里面查找某個(gè)章節(jié)位置的時(shí)候,我們就可以只掃描書(shū)的目錄,掃描的范圍縮小了n倍,查詢(xún)的效率自然就提高了。2010-06-06