c#能实现吗?

dcba43211 2008-02-19 02:47:11
一般情况下用SqlDataReader 中的Read方法可以实现一次读取数据库中的一行

可是我现在想读取第一条后,再读取第100条

虽然可以用循环的方式得到第一百条的数据,但是我想知道有没有其他更省时间的方法
...全文
477 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙宜坡 2008-02-21
  • 打赏
  • 举报
回复
学习了!呵呵
dcba43211 2008-02-21
  • 打赏
  • 举报
回复
回33楼

现在执行count(frequency)
要一分钟
共320000条记录
paulin 2008-02-21
  • 打赏
  • 举报
回复
学习!!
机器人 2008-02-21
  • 打赏
  • 举报
回复
你把*号换成主键试试:

select count(frequency) from n2_data

你现在select count(*)执行多长时间?整个表的数量级是多少?
dcba43211 2008-02-21
  • 打赏
  • 举报
回复
回31楼

count提出去是可以的,但是单独运行select count(*) 也是件很消耗时间的事啊

有没有什么好的办法改进一下呢
dcba43211 2008-02-20
  • 打赏
  • 举报
回复
select count(*) from n2_data

这个查询语句也很耗时啊,能不能改进啊?
机器人 2008-02-20
  • 打赏
  • 举报
回复
WHERE漏写了...
机器人 2008-02-20
  • 打赏
  • 举报
回复
改进方案:
1. select count(*) from n2_data 单独拿出来查询一次。(这个是影响速度的关键)
2. 用WITH关键字,另外不用*了,因为你只要N2_Data中的frequency字段。
  
WITH T As (
SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID,
frequency
FROM N2_Data
)
SELECT frequency
FROM T
dcba43211 2008-02-20
  • 打赏
  • 举报
回复
谢谢fangxinggood

功能是完成了,但是运行的速度好慢啊?
能不能改进一下加快速度啊,谢谢
机器人 2008-02-20
  • 打赏
  • 举报
回复
那么你就当独取一下Count呗。


或者这样:

SELECT frequency,
(
select count(*) from n2_data
) as cnt
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, *
FROM N2_Data
) T
WHERE T.ROWID=1 OR T.ROWID%10000=0
dcba43211 2008-02-20
  • 打赏
  • 举报
回复
程序控制是不是指用sqldatareader啊
那样我觉得速度不怎么样啊?
ffanpeng 2008-02-20
  • 打赏
  • 举报
回复
用sql语句也可以,用程序控制也可以
zlz_212 2008-02-20
  • 打赏
  • 举报
回复
Sql server 2005:
SELECT
a.num,
table1.*
FROM
table1,
(select id, ROW_NUMBER() over (ORDER BY id) as num from table1) a
WHERE
(a.num % 100 =0 or a.num = 1)
and
a.id = table1.id

PS: ID为你要进行排序的字段
返回1,100,200,300,400,......10000,......
dcba43211 2008-02-20
  • 打赏
  • 举报
回复
我这样的代码显示有错啊

SELECT frequency
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, * ,count(*) AS CNT
FROM N2_Data
) T
WHERE T.ROWID=1 OR T.ROWID%10000=0

这是怎么回事,不加",count(*) AS CNT "是对的,加了就有问题了
机器人 2008-02-20
  • 打赏
  • 举报
回复

SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, *, count(*) AS CNT
FROM EMPLOYEE
) T
WHERE T.ROWID=1 OR T.ROWID=100


让每条数据都带上Count,就可以了。
dcba43211 2008-02-20
  • 打赏
  • 举报
回复
谢谢8楼的
我用SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, *
FROM EMPLOYEE
) T
WHERE T.ROWID=1 OR T.ROWID=100

语句成功了

还有一个问题就是我能不能同时得到数据库记录总数呢?(不用COUNT(*))?
dcba43211 2008-02-20
  • 打赏
  • 举报
回复
我改后的语句是

SELECT * FROM (SELECT ROWID=IDENTITY(int,1,1),frequency FROM N0_Data ORDER BY frequency ) T WHERE T.ROWID=1 OR T.ROWID%100=0

可是提示:"关键字 'IDENTITY' 附近有语法错误。"

请问这是怎么回事啊?谢谢你了
机器人 2008-02-20
  • 打赏
  • 举报
回复
用这个也行了,只要把Count提出去,这个效率也不是很差的。

SELECT frequency
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, *
FROM N2_Data
) T
WHERE T.ROWID=1 OR T.ROWID%10000=0
dcba43211 2008-02-20
  • 打赏
  • 举报
回复
回28楼

因为数据量很大,所以用DATATABLE很消耗时间
dcba43211 2008-02-20
  • 打赏
  • 举报
回复
回27楼

语句在执行的时候提示错误::关键字 'with' 附近有语法错误。如果此语句是公用表表达式或 xmlnamespaces 子句,那么前一个语句必须以分号结尾


能不能修改一下啊
加载更多回复(15)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧