for (int i = 0; i < 60000; i++) { strSQL = "select * from test where id > " + i; OleDbCommand Cmd = new OleDbCommand(strSQL, MyConn); OleDbDataReader Dr; Dr = Cmd.ExecuteReader(); Dr.Read(); int intId = (int)Dr["id"]; Response.Write("现在读取第" + intId + "条记录<br>"); Dr.Close(); }
strSQL = "select id from test where id > " + i; [解决办法] 另外,一般取6万肯定不是用于显示,可以把一些逻辑放到sql语句中。
如果用于显示,可以分页。每次取一点。 [解决办法] select top 60000 id from test order by id asc [解决办法] 楼主疯了吧 这是要做什么啊 [解决办法]
这个应该对,没注意lz去6w次,每次都去6w -i条记录 [解决办法] for (int i = 0; i < 60000; i++) { strSQL = "select * from test where id > " + i; OleDbCommand Cmd = new OleDbCommand(strSQL, MyConn); OleDbDataReader Dr; Dr = Cmd.ExecuteReader(); Dr.Read(); int intId = (int)Dr["id"]; Response.Write("现在读取第" + intId + "条记录<br>"); Dr.Close(); } 这样做确实效率低下,首先*应该换成整个字段名,其次都是60000条一起读取,然后做个do until rs.eof之类的,当然这是ado的方法,你这个能失败我怀疑可能是因为太慢,并不是真死,因为如果网页要返回6万行记录需要的时间相当久,而且不能保证浏览器不卡死,你可以在respsonse.Write后加个flush试试,看看你的硬件能跑到多少行,当然这么做会更卡,可以直接优化下Response.Write(intId)就完了,自己做测试用,但是要知道实际操作中不可能需要这样的,这么多数据一般就用分页来做了.哪个用户也不会一下看60000行数据. [解决办法] 又看了一遍楼上的,他们这些方法都是治标不治本.试试我说的办法.先确定你是不是真的需要6万个id显示在一个页面上,如果不需要,就分页,一定行的. [解决办法] for (int i = 0; i < 60000; i++){ Response.Write("现在读取第" + CStr(i) + "条记录<br>"); }
strSQL = "select id from test where id > " + i; OleDbCommand Cmd = new OleDbCommand(strSQL, MyConn); OleDbDataReader Dr; Dr = Cmd.ExecuteReader(); while(Dr.Read()) { int intId = (int)Dr["id"]; Response.Write("现在读取第" + intId + "条记录<br>"); } Dr.Close();