在开发Web应用程序时,经常需要从数据库中检索大量数据,并以分页的形式展示给用户。然而,如果直接从数据库加载所有数据到服务器内存中,再进行过滤和分页,将会对服务器性能造成严重影响。本文将介绍一种高效的数据库查询与分页技术,通过使用用户控件DataFinder,可以简化数据加载和分页操作,提高应用性能。
在Web应用程序中,经常需要展示一个来自SQL查询的记录列表。如果查询返回了100万条记录,并且这些数据通过网络传输(假设数据库不在应用程序服务器上),那么这些信息将加载到服务器应用程序的内存中,然后过滤出真正想要查看的记录(当前页面)。所有这些操作都会导致性能问题,但许多人可能已经在这样的环境中运行应用程序了。
为了解决这个问题,通常需要满足以下要求:
为了解决上述问题,需要:
虽然上述所有步骤都可以实现,但会花费相当多的时间,并且随着系统的演变,这些操作将变得重复。这时,用户控件DataFinder就显得非常有用。这个控件简化了工作,并进一步提高了性能(在数据库中执行分页)。
打开解决方案,搜索引擎位于Controles文件夹中。这个控件使用的图片和CSS位于CSS/Buscador文件夹中(尽量保持示例中的文件结构,这样不需要更改样式表和图片的路径)。
在web.config文件中,有连接数据库"AdventureWorks"的CNN链接链。可以从以下链接下载这个数据库:。这里需要提到的是,连接的是SQL Server2008数据库。
创建SQL查询,并将其存储在"Consultas"文件夹中,与"Ejemplo.sql"文件位于同一文件夹中(文件不一定需要.sql扩展名)。查询的标识符"- $TART -"是分隔符,用来指示查询的开始,以及之前的注释。
-- SQL --
------------------------------------------
--
Name: Kevin Guisbert Segales
--
Company: KDev
--
Date: 13/01/2010
--
Copyright 2010
--
La Paz - Bolivia
--
------------------------------------------
--
$TART --
SELECT
e.EmployeeID,
e.NationalIDNumber,
e.Title,
e.VacationHours
FROM
HumanResources.Employee e
在这个例子中,有一个名为"Default.aspx"的页面,需要添加以下文件头属性:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" EnableEventValidation="false" %>
在Head部分,添加对页面样式表的引用:
<link href="CSS/Buscador/Buscador.css" rel="stylesheet" type="text/css" />
将用户控件"Buscador.ascx"拖到页面上。
在代码后台,添加以下属性:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
'- Inicializamos datos del buscador -
Me.Buscador1.Consulta = "Ejemplo.sql"
Me.Buscador1.Titulo = "Buscador Genérico"
Me.Buscador1.OrderBy = "Title"
Me.Buscador1.DataBind()
End If
End Sub
其中:
如果已经按照上述步骤操作,可以运行应用程序并享受这个控件带来的便利。