Stored Procedure 進行分頁的方法如果是在 SQL Server 2000 可以用 Temp table or table variant , 另外可以利用 Set row count 的方法提高效能。
http://www.4guysfromrolla.com/webtech/042606-1.shtml
至於 SQL Server 2005 就不用這麼麻煩,因為有新的ROW_NUMBER function
CREATE PROCEDURE dbo.ShowLog
@PageIndex INT,
@PageSize INT
AS
BEGIN
WITH LogEntries AS (
SELECT ROW_NUMBER() OVER (ORDER BY Date DESC)AS Row, Date, Description
FROM LOG)
SELECT Date, Description
FROM LogEntries
WHERE Row between (@PageIndex - 1) * @PageSize + 1 and @PageIndex*@PageSize
END
至於ASP.NET 端就要配合 objectDataSource 不能用 SqlDataSource,因為如果用 SqlDataSource就不能用GridView 的分頁功能,而要自己寫分頁,使用objectDataSource時你可以自己寫business object , 或是使用 V.S. 2005 的 Dataset Designer , 它會幫你產生 TableAdapters 讓你可以用在 objectDataSource。
你需要設定 objectDataSource 的
- EnablePaging = true
- MaximumRowsParameterName
- startRowIndexParameterName
- SelectCountMethod
- SelectMethod
只是這裡有一個效能的考量,因為 objectDataSource 會先call SelectCountMethod 取得 Page 的 資料,再 call SelectMethod 取得總共有多少筆資料,這樣它才有辦法算頁數,只是這樣就會有兩次的 資料庫連線,如果我們在SelectCountMethod就已經傳回 總共有多少筆,有辦法用這個資料嗎?
答案是有的,只是要用的.net framework 2.0 partial class 的功能,去擴充TableAdapters ,如下的範例:
namespace MyDataSetTableAdapters{
///
/// Summary description for MyDataSetTableAdapters
///
///
public partial class usp_Select_Netatm_logTableAdapter:Component {
private int _totalRowCount = 0;
public int TotalRowCount {
get {
return _totalRowCount;
}
set
{
_totalRowCount = value;
}
}
public int SelectCommandTimeout
{
get
{
return (this._commandCollection[0].CommandTimeout);
}
set
{
for (int i = 0; i < commandtimeout =" value;"> startRowIndex, System.Nullable
{
//return ((object)HttpContext.Current.Session["TotalRowCount"]);
return (object)_totalRowCount;
}
}
}
1 則留言:
A further issue is that vіdeο gaming beсаme
оne of the all-time mοst imρortаnt
fогms of fun for people ѕрanning vaгious ages.
Kids pаrticipatе in νiԁeo gameѕ, anԁ also
аdults do, too. Thе XBox 360 is ϳust about the faѵoritе gaming ѕystems for
fοlks who lovе to havе а lοt of videо gamеs available tο
them, anԁ also ωhο like to relax and plаy livе with other indivіԁuаls all
over the worlԁ. Тhankѕ fοr sharing your opіnіons.
my ωebpage - is quibids legit
張貼留言