日期:2014-05-18  浏览次数:20929 次

如何循环一个表,逐条读取记录?
一般会把所需要的记录选取出来,填入dataTable中,再在内存中操作对应的表,最后再更新回数据库中。
那么如果数据量很大的话有什么解决方案?
比如要对整个库进行读取和内容处理,不可能一次都读取出来的。

------解决方案--------------------
可以使用Row_Number 方法,需要多少资料,取多少资料
SELECT 
ROW,CategoryID,CategoryName,Description 
FROM
(SELECT
ROW_NUMBER() OVER(ORDER BY :sortExpression) AS ROW, 
CategoryID,CategoryName,Description FROM Categories 
) AS PageTable
WHERE (ROW > @startRowIndex)
AND (ROW <= (@maximumRows + @startRowIndex))
------解决方案--------------------
for(int i=0;i<table.Rows.Count;i++)
{
//处理
}
------解决方案--------------------
或者

C# code

foreach(DataRow row in table.Rows)
{
  //代码
}

------解决方案--------------------
那就采用流模型

vs2005没有linq,我不知道有了linq会怎么处理,可能要简单得多,

流模型就是用SqlCommand, SqlDataReader构成的操作,不会占内存的,不象

DataSet
------解决方案--------------------
很明显,可以用SQL语句的
select * top10 from 表名 (具体不记得了)
来查询前10条记录,或者可以查百分之几的数据
------解决方案--------------------
数据量大,消耗的内存就多,导致等待的时间过长.

所以要采取每次读取少量数据,多次读取数据库的方式来处理.
------解决方案--------------------
一张表如果数据太多的话,应该删除一些数据,插入历史库中,频繁操作的表中数据尽量不能太大,然后在用LZ的方法。

------解决方案--------------------
修改你的SQL,一部分一部分的取出来显示,有点像分页的SQL那种


select top n * ............ where x not in (select top m * 。。。。。。。)