几个小时后,我终于意识到我可以在我的 ASP.NET 应用程序中正确使用 Cache 对象,但是我的存储过程阻止它正常工作。
此存储过程正常工作:
CREATE PROCEDURE [dbo].[ListLanguages]
@Page INT = 1,
@ItemsPerPage INT = 10,
@OrderBy NVARCHAR (100) = 'ID',
@OrderDirection NVARCHAR(4) = 'DESC'
AS
BEGIN
SELECT ID, [Name], Flag, IsDefault FROM dbo.Languages
END
但是这个(我想要的)没有:
CREATE PROCEDURE [dbo].[ListLanguages]
@Page INT = 1,
@ItemsPerPage INT = 10,
@OrderBy NVARCHAR (100) = 'ID',
@OrderDirection NVARCHAR(4) = 'DESC',
@TotalRecords INT OUTPUT
AS
BEGIN
SET @TotalRecords = 10
EXEC('SELECT ID, Name, Flag, IsDefault FROM (
SELECT ROW_NUMBER() OVER (ORDER BY ' + @OrderBy + ' ' + @OrderDirection + ') as Row, ID, Name, Flag, IsDefault
FROM dbo.Languages) results
WHERE Row BETWEEN ((' + @Page + '-1)*' + @ItemsPerPage + '+1) AND (' + @Page + '*' + @ItemsPerPage + ')')
END
我将@TotalRecords 参数的值设为10,因此您可以确定问题不是来自我知道不支持的COUNT(*) 函数。
此外,当我从 SQL Server Management Studio 运行它时,它完全符合它应该做的事情。在 ASP.NET 应用程序中,结果被正确检索,只是缓存无法正常工作!
你能帮忙吗?
也许是一个提示
我认为依赖 HasChanged 属性的原因与从 ROW_NUMBER 生成的列 Row 只是暂时的事实有关,因此 SQL SERVER 无法说出结果是否更改。这就是 HasChanged 始终设置为 true 的原因。
有谁知道如何在不使用 COUNT 或 ROW_NUMBER 函数的情况下对 SQL SERVER 的结果进行分页?