当前位置:编程学习 > C#/ASP.NET >>

c#能实现吗?

一般情况下用SqlDataReader 中的Read方法可以实现一次读取数据库中的一行

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

虽然可以用循环的方式得到第一百条的数据,但是我想知道有没有其他更省时间的方法 --------------------编程问答-------------------- SQL语句直接读取第1条和第100条不就行了 --------------------编程问答-------------------- 怎么写啊 --------------------编程问答-------------------- select top 1 * from table1  --第1条
select   top  1  *  from   table1 where id not in (select  top  99  id from   table1)  --第100条 --------------------编程问答-------------------- 谢谢楼上的
但是我不是这个意思啊

我的意思是说我要分别读取第1条,第100条,第200条,第300条,第400条,第500条....

我怎不能写那么多语句吧 --------------------编程问答-------------------- 用sqlAdapter把结果集放到datatable里面

然后dt.rows[99] --------------------编程问答-------------------- 你还是用游标吧。。速度最快 --------------------编程问答-------------------- SQL SERVER 2005 支持ROW_NUMBER OVER函数。

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


SQL SERVER 2000 的话可以用Identity(int, 1, 1)

SELECT * 
  FROM (
         SELECT ROWID=IDENTITY(int,1,1) , EMPID, FNAME, LNAME 
         FROM EMPLOYEE ORDER BY EMPID
       ) T
 WHERE T.ROWID=1 OR T.ROWID=100

--------------------编程问答-------------------- 1和100,200,300, 400
那就是1和100的整数倍咯(对100求余数=0)


SELECT * 
  FROM (
         SELECT ROWID=IDENTITY(int,1,1) , EMPID, FNAME, LNAME 
         FROM EMPLOYEE ORDER BY EMPID
       ) T
 WHERE T.ROWID=1 OR T.ROWID%100=0

--------------------编程问答-------------------- 谢谢楼上的 
但是我不是这个意思啊 

我的意思是说我要分别读取第1条,第100条,第200条,第300条,第400条,第500条.... 

我怎不能写那么多语句吧

--用sql语句写
如果有主键列id``可以这样:
select * from 
(select px=(select count(1) from 表名 where id<a.id)+1 from 表名 a)b
where px=1 or px%100=0

--------------------编程问答-------------------- 建议先从数据库中将你需要读的数据通过DataAdataper放到一个你自己定义的表中,然后使用表中数据读取方式读取你所需要的记录。速度很快的。 --------------------编程问答-------------------- 请问8楼


SELECT   *   
    FROM   ( 
                  SELECT   ROWID=IDENTITY(int,1,1)   ,   EMPID,   FNAME,   LNAME   
                  FROM   EMPLOYEE   ORDER   BY   EMPID 
              )   T 
  WHERE   T.ROWID=1   OR   T.ROWID%100=0 




中的ROWID EMPID FNAME LNAME等等都分别代表什么呢?谢谢 --------------------编程问答-------------------- EMPID,FNAME,LNAME是表EMPLOYEE中的字段名,你根据你自己的表进行修改。ROWID就是对记录的一个编号。 --------------------编程问答-------------------- 我改后的语句是

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' 附近有语法错误。"

请问这是怎么回事啊?谢谢你了
--------------------编程问答-------------------- 谢谢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(*))? --------------------编程问答--------------------

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,就可以了。
--------------------编程问答-------------------- 我这样的代码显示有错啊

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 "是对的,加了就有问题了 --------------------编程问答-------------------- 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,...... --------------------编程问答-------------------- 用sql语句也可以,用程序控制也可以 --------------------编程问答-------------------- 程序控制是不是指用sqldatareader啊
那样我觉得速度不怎么样啊? --------------------编程问答-------------------- 那么你就当独取一下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
--------------------编程问答-------------------- 谢谢fangxinggood

功能是完成了,但是运行的速度好慢啊?
能不能改进一下加快速度啊,谢谢 --------------------编程问答-------------------- --------------------编程问答-------------------- 改进方案:
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
--------------------编程问答-------------------- WHERE漏写了... --------------------编程问答-------------------- select   count(*)   from   n2_data

这个查询语句也很耗时啊,能不能改进啊? --------------------编程问答-------------------- WITH T As (SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, 
           frequency 
      FROM N2_Data)
  SELECT frequency  FROM T WHERE   T.ROWID=1   OR   T.ROWID%10000=0

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

怎么回事啊?麻烦指正! --------------------编程问答-------------------- WITH T AS
(SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, frequency FROM N2_Data)
SELECT frequency FROM T WHERE T.ROWID=1 OR T.ROWID%10000=0

我没有测试环境哦。这个如果不行,你还用子查询方式吧。

select count(*) from n2_data 这个如果很慢,那你就应该查查看你这个表有没有建立索引了。
--------------------编程问答-------------------- 你为什么不用DATATABLE呢,你的数据量很大吗?
你把数据取出来放到DATATABLE后就就想取哪行就取哪行了吗. --------------------编程问答-------------------- 回27楼

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


能不能修改一下啊 --------------------编程问答-------------------- 回28楼

因为数据量很大,所以用DATATABLE很消耗时间 --------------------编程问答-------------------- 用这个也行了,只要把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
--------------------编程问答-------------------- 回31楼

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

有没有什么好的办法改进一下呢 --------------------编程问答-------------------- 你把*号换成主键试试:

select count(frequency) from n2_data

你现在select count(*)执行多长时间?整个表的数量级是多少? --------------------编程问答-------------------- 学习!! --------------------编程问答-------------------- 回33楼

现在执行count(frequency)
要一分钟
共320000条记录 --------------------编程问答-------------------- 学习了!呵呵
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,