我希望在网站上获取大量数据(大约19000条记录),并在datalist控件上显示。 我的数据列表有一个分页功能,第一次我在datalist上只显示6条记录。 那么他的用户可以去第2页和第3页...... 获取所有记录到数据表获得更多时间。 请帮我详细说明我应该在sql server中使用什么。
private void FetchDataToDataList()
{
DataTable dt = new DataTable();
if (Cache["DataTable-cach"] == null)
{
String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(strConnString);
SqlCommand cmd = new SqlCommand("SELECT dbo.table_name.field_name, FROM dbo.table_name ", con);
con.Open();
dt = new DataTable("T");
string startime = System.DateTime.Now.ToLongTimeString();
dt.Load(cmd.ExecuteReader());
string endtime = System.DateTime.Now.ToLongTimeString();
Cache.Insert("DataTable-cach", dt, null, DateTime.Now.AddMinutes(5), System.Web.Caching.Cache.NoSlidingExpiration);
con.Close();
}
else
{
dt = ((DataTable)Cache["DataTable-cach"]);
}
// pagedDS is data list control
PagedDataSource pagedDS = new PagedDataSource();
pagedDS.DataSource = dt.DefaultView;
pagedDS.AllowPaging = true;
pagedDS.PageSize = 6;
pagedDS.CurrentPageIndex = CurrentPage;
dlPaging.DataSource = pagedDS;
dlPaging.DataBind();
lblCurrentPage.Text = pagedDS.PageCount.ToString() +" صفحه " + (CurrentPage + 1).ToString()+ " از " ;
// Disable Prev or Next buttons if necessary
cmdPrev.Enabled = !pagedDS.IsFirstPage;
cmdNext.Enabled = !pagedDS.IsLastPage;
}
答案 0 :(得分:4)
根据SQL Server版本,您应该只根据需要从数据库中请求尽可能多的记录。
在SQL Server 2012中,您可以使用OFFSET
和FETCH NEXT
关键字。在早期版本中,请使用ROW_NUMBER
。
答案 1 :(得分:0)
您可以尝试分页,如下所示
http://www.codeproject.com/Articles/192408/SQL-Pager-Control-for-GridView-DataList-Repeater-D
答案 2 :(得分:0)
一次Laoding 19,000条记录不是一个好选择,因为它需要时间来同时构建所有的html。
最重要的是,你不会一次显示所有记录。
因此,您只需要加载当前正在向用户显示的记录。
这极大地提升了您的性能/页面加载速度。
编写存储过程,使得您一次只获取所需记录而不是所有记录。
示例:强>
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
CREATE PROCEDURE GetDataPageWise // Name of the stored procedure
@PageIndex INT = 1
,@PageSize INT = 10
,@RecordCount INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT ROW_NUMBER() OVER
(
ORDER BY [ColumnName] ASC
)AS RowNumber
,[ColumnName]
,[ColumnName]
,[ColumnName]
INTO #Results // #Results is the temporary table that we are creating
FROM [TableName]
SELECT @RecordCount = COUNT(*)
FROM #Results
SELECT * FROM #Results
WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
DROP TABLE #Results // Dropping the temporary table results as it is not required furthur
END
GO
希望这会有所帮助..