带 SQL 分页的 Gridview
一个简单而详细的 ASP.NET 程序,使用 Gridview 在 SQL 2005 中进行分页。
引言
这是一个简单的 C# 网站,它使用 ASP Gridview
来显示记录,但仅显示从执行的 SQL 分页函数返回的部分数据。
背景
在我还不熟悉 SQL 2005 的时候,我一直在想 SQL 2005 有什么新功能,以及我如何从中受益。在那里我发现了 row_number()
函数,这个函数类似于表中的自动标识种子,只是它是在查询执行期间实现的。
在这里,我的示例程序将向您展示如何将 row_number()
的功能扩展到您的 ASP.NET 网页!
请记住,我在这里使用的 SQL 可以很容易地用作数据库中的存储过程。
Using the Code
现在,我将讨论 GetSQL()
方法,或者我们的主要 SQL 分页。
string GetSQL()
{
/* My Generated SQL Paging */
return @"
/* Here we declare our main variable, this will be your
parameters when you use this as a Stored Procedure */
DECLARE
@START AS INT ,
@MAX AS INT ,
@SORT AS VARCHAR(100) ,
@FIELDS AS VARCHAR(MAX) ,
@OBJECT AS VARCHAR(MAX)
SELECT
@START = {3} ,
@MAX = {4} ,
@SORT = '{2}' ,
@FIELDS = '{1}' ,
@OBJECT = '{0}'
/* CLEANING PARAMETER VALUES */
IF (ISNULL(@SORT , '') = '') BEGIN SET @SORT = 'SELECT 1' END
IF (@START < 1) BEGIN SET @START = 1 END
IF (@MAX < 1) BEGIN SET @MAX = 1 END
/* SET THE LENGTH OF RESULT */
DECLARE @END AS INT
SET @END = (@START + (@MAX - 1))
/* Here we get the total rows therein based from the
Object or main SQL Query given to the parameter @object */
/* GET THE TOTAL PAGE COUNT */
DECLARE
@SQL_COUNT AS NVARCHAR(MAX)
SET @TOTAL = 0
SET @SQL_COUNT = 'SELECT @GET_TOTAL = COUNT(*)
FROM (' + @OBJECT + ') AS [TABLE_COUNT]'
EXEC sp_executesql @SQL_COUNT, N'@GET_TOTAL INT OUTPUT',
@GET_TOTAL = @TOTAL OUTPUT
/* Here we are now creating the actual SQL paging script to
produce the desired partial records */
/* GET THE RECORDS BASED FROM THE GIVEN STATEMENT AND CONDITION */
DECLARE @SQL AS NVARCHAR(MAX)
SET @SQL =
'SELECT ' + @FIELDS + '
FROM
(
SELECT
(ROW_NUMBER() OVER(ORDER BY ' + @SORT + ')) AS [ROWNUM] , *
FROM (
SELECT ' + @FIELDS + '
FROM (' + @OBJECT + ') AS [SOURCE_TABLE]
) AS [SOURCE_COLLECTION]
) AS TMP
WHERE
[ROWNUM] BETWEEN ' + CAST(@START AS VARCHAR(10)) +
' AND ' + CAST(@END AS VARCHAR(10)) + '
'
EXEC(@SQL) /* we now execute the script */
";
}
现在我们开始为方法赋值。
在这里,我们赋值给对象或主查询。我们可以使用 SQL VIEW,但在这个例子中,我们赋值给纯查询。
string MAIN_SQL = @" Select A.ProductId, A.ProductName, A.UnitPrice, A.UnitsInStock,
B.CompanyName From Products AS A Inner Join Suppliers AS B on
(B.SupplierId = A.SupplierId)";
在这里,我们赋值要在 GridView
中显示的字段。
string FIELDS_TO_DISPLAY =
"ProductId, ProductName, UnitPrice, UnitsInStock,CompanyName";
在这里,我们赋值要排序的字段。在我们的例子中,只有一个字段,并且按升序排序。
string FIELDS_TO_BE_SORT = " ProductName ASC ";
现在我们只需将变量放在其索引赋值中。请记住,如果您使用的是存储过程,将会更容易和更具描述性,因为在我们的例子中,我们只是使用了从 .NET 获取的 string
格式。
SQL = string.Format(SQL, MAIN_SQL, FIELDS_TO_DISPLAY,
FIELDS_TO_BE_SORT, rows_start, rows_per_page);
接下来只是让您尝试;这些只是您需要了解的主要字段,其他都是我们日常使用的普通代码。
我知道这篇文章还有改进的空间,所以请随时留下您的评论。
关注点
我希望我能与大家分享一篇好的文章!
您可以通过 tom.bauto@gmail.com 与我联系。
历史
- [2009.05.27] - Tom Bauto { 版本 1.0.0 }