Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 从SQL服务器端分页记录集_.net_Sql Server_Vb.net - Fatal编程技术网

.net 从SQL服务器端分页记录集

.net 从SQL服务器端分页记录集,.net,sql-server,vb.net,.net,Sql Server,Vb.net,这件事我已经绞尽脑汁好一阵子了。我想从SQL数据库中调用1k条记录,并按每100条分页。在经典的ASP中,使用ADODB非常容易,但是使用VB使用ADO.net,我找不到一种不涉及存储过程的方法,我现在想避免这种方法。调用所有1k并以编程方式对其排序似乎真的很愚蠢 编辑: 它是SQLServer2005/.NET4.0/VisualStudio2010 编辑2: 只是重申一下,我已经在谷歌上搜索过很多次了,不想使用存储过程。有很多方法可以获取分页数据,但我看到的一切都涉及到在程序中分页数据,而不

这件事我已经绞尽脑汁好一阵子了。我想从SQL数据库中调用1k条记录,并按每100条分页。在经典的ASP中,使用ADODB非常容易,但是使用VB使用ADO.net,我找不到一种不涉及存储过程的方法,我现在想避免这种方法。调用所有1k并以编程方式对其排序似乎真的很愚蠢

编辑: 它是SQLServer2005/.NET4.0/VisualStudio2010

编辑2: 只是重申一下,我已经在谷歌上搜索过很多次了,不想使用存储过程。有很多方法可以获取分页数据,但我看到的一切都涉及到在程序中分页数据,而不是从服务器分页数据

编辑3: 下面是一个使用经典ASP的服务器端分页示例,它不需要任何服务器端的东西。它使用Access,但对SQL也是一样
排号是您在这里的答案。如果您的数据集包含支持结果的字段,则可以按如下方式绑定到所述字段:

生成测试数据集:

DECLARE @RecordSet TABLE
(
    ID  INT IDENTITY(1,1),
    VALUE   VARCHAR(255)
)

INSERT INTO @RecordSet (VALUE) VALUES ('One')
INSERT INTO @RecordSet (VALUE) VALUES ('Two')
INSERT INTO @RecordSet (VALUE) VALUES ('Three')
INSERT INTO @RecordSet (VALUE) VALUES ('Four')
INSERT INTO @RecordSet (VALUE) VALUES ('Five')
INSERT INTO @RecordSet (VALUE) VALUES ('Six')
INSERT INTO @RecordSet (VALUE) VALUES ('Seven')
INSERT INTO @RecordSet (VALUE) VALUES ('Eight')
INSERT INTO @RecordSet (VALUE) VALUES ('Nine')
INSERT INTO @RecordSet (VALUE) VALUES ('Ten')
基于ID或值字段的确定性运行:

-- Deterministic - Ordering Numerically by PKey
SELECT ID, VALUE, RowNum
FROM
(
    SELECT ID, VALUE, ROW_NUMBER() OVER (PARTITION BY 0 ORDER BY ID) AS RowNum
    FROM @RecordSet
    WHERE VALUE LIKE '%e%'
) t
WHERE  t.RowNum BETWEEN 3 AND 6

-- Deterministic - Ordering Alphanumerically by Value
SELECT ID, VALUE, RowNum
FROM
(
    SELECT ID, VALUE, ROW_NUMBER() OVER (PARTITION BY 0 ORDER BY VALUE) AS RowNum
    FROM @RecordSet
    WHERE VALUE LIKE '%e%'
) t
WHERE  t.RowNum BETWEEN 3 AND 6
如您所见,您可以调整基于RowNum字段的WHERE子句以打开结果窗口

如果您遇到无法确定生成结果的情况,例如,您仍然需要打开窗口,您可以使用以下技巧,我将其归功于本文CONNECT:

希望有帮助


John

您使用的是哪个版本的SQL Server?如果是2012年,您可以使用该子句进行分页。只是您应该找到大量的示例,例如,但是您可能必须使用SP进行分页。关于您的编辑2:是的,存储过程是一个程序,但它在服务器上运行,因此分页是根据需要在服务器端完成的。并没有什么灵丹妙药可以为您做到这一点——需要一些服务器端代码来为请求的页面提供数据。
-- Nondeterministic Ordering -- Probably want to avoid as these results are not guaranteed to be repeatable
SELECT ID, VALUE, RowNum
FROM
(
    SELECT ID, VALUE, ROW_NUMBER() OVER (PARTITION BY 0 ORDER BY NULLIF(0*RAND(), 0)) AS RowNum
    FROM @RecordSet
    WHERE VALUE LIKE '%e%'
) t
WHERE  t.RowNum BETWEEN 3 AND 6