使用ADO执行SELECT语句后的结果 一个表有600多万条记录,用ADO执行select * from ttt where t1='200701013456'这样的语句。我用if not rs.bof and not rs.eof then这样的条件(VB)来判断是否有记录返回。现在的问题是,当SQL SERVER服务器CPU符合过高时,且实际并没有符合条件的记录,可是not rs.bof and not rs.eof这个条件却为真。为什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if not rs.eof then就可以了,你那种方式,只有数据游标向前向后都可能跳转的,才需要判断如果select之后,就判断,仅仅需要eof 楼上的请看清问题再回答。出现这种情况时,BOF和EOF都为FALSE。 楼主激动了一点--------------set conn=createobject("adodb.connection")conn.cursorlocation=3set rs=createobject("adodb.recordset")rs.cursorlocation=3rs.cursortype=3rs.locktype=3connsql="Provider=SQLOLEDB.1;Password=;Persist Security Info=True;User ID=sa;Initial Catalog=test;Data Source=(local)"conn.open connsqlsql="select * from a where 1=0"rs.open sql,conn,,,1msgbox "eof=" & rs.eofmsgbox "bof=" & rs.bofmsgbox "not bof and not eof=" & ((not rs.bof) and (not rs.eof))rs.closeconn.closeset rs=nothingset conn=nothing这段代码你可以存为vbs测试一下,我的测试结果是eof=TRUEBof=TRUEnot bof and not eof=FALSE和你的情况不一样或许就如同你说的 当SQL SERVER服务器CPU符合过高时 造成的你可以从游标类型,锁定类型,客户端游标设置,是否设置了异步方式看看能否找到确实原因 正常情况来说,如果SELECT返回的结果是有记录的,那么BOF和EOF都为FALSE。我问的是在服务器CPU负荷为100%的情况下,SELECT返回的结果按正常来说应该是没有记录的,这时BOF和EOF都应为TRUE,可是实际情况相反。我要问的是这个情况是为什么! 请注意,我的问题不是BOF和EOF的判断语法问题!请仔细看问题的描述! 模拟测试了楼主的CPU负荷高的时候,接近100%,数据量600万,进行查询,没有出现楼主的情况。只是在设置了异步模式的时候,rs的各种属性的值有变化,但也没有出现楼主的情况顺便提个建议,楼主的情绪还是平和一些,能理解你遇到问题,却暂时无法解决的烦躁,但同样心平气和的解决问题不是一件难事,即便别人的建议你不认同,请保持心平气和 to dljinsui(风在发端),我还懒的理你,回答问题没看清问题就象模象样的回答一通,是卖弄还是怎么? to hui_hui_2007(平安是福),上一记录集一定关闭了,用的是服务端游标。请详细解释这种情况可能和游标的关系。 to vieri_ch(尘雨-自在飞花轻似梦,无边丝雨细如愁),你没看清问题就乱回答一通,请先反省你自己的错误先。 可能我的回答没有解决你的问题,而你认为我的过错在于没有看清楚并理解你的问题?或许就如同你说的 当SQL SERVER服务器CPU符合过高时 造成的你可以从游标类型,锁定类型,客户端游标设置,是否设置了异步方式看看能否找到确实原因-----------------------------这是我回答的时候提供的一个解决思路,我提到客户端游标的问题,和异步方式。如果你认为这些对你解决问题没有任何帮助,但为何在后面的回复其他人提问中又提到了服务端游标和客户端游标的问题?如果我确有过错,我不会回避,理解问题并解决问题本身就是建立在互相沟通以及提供更多相关信息的基础之上。但是如果我的回答中的提供了部分思路,你确认为我仍然没有理解,那为何不提供更多有关问题的信息,也许更多朋友会参与进来提供解决方案。现在的问题是,当SQL SERVER服务器CPU符合过高时,且实际并没有符合条件的记录,可是not rs.bof and not rs.eof这个条件却为真。-----------------------------------你的问题分解如下出现问题的场景1,数据600多万2,服务端游标3, select语句4。sql server 服务器CPU负荷过高5。select查询返回结果没有符合条件的问题6。使用标准的判断结果集是否为空的检查结果与预期相反(not rs.bof and not rs.eof这个条件为真)------------------这是我对你问题的理解。我首先进行了模拟场景的测试,并得到与你的问题相反的结果我提供了几个思路供你从游标,锁定类型,是否异步模式几个方面查找,难道这样也有错误吗?即便我所理解的是错误的,你完全可以指出错误在哪里,然后提供更多信息。心平气和的解决问题,而不是互相指责。 sql2005 导出列表 一个棘手问题!寻求好的解决思路。高手帮忙啊! 请教大家一个数据库锁的问题~跪求~~~~~~~~~~ 函数如何编写 一个难题 Sqlserver服务器总是遭到外网的攻击。有办法过滤Sqlserver的服务IP么? 我的SQLServer不能存入 "Ø "這個字符,"Ø "這個字符是ALT+216打出來的,請教! 请教一个SQL Server中datetime类的问题 求一SQL语句 找一条优化的SQL语句.... 日期处理函数 SQL SERVER数据库时间点恢复.
就可以了,你那种方式,只有数据游标向前向后都可能跳转的,才需要判断
如果select之后,就判断,仅仅需要eof
--------------
set conn=createobject("adodb.connection")
conn.cursorlocation=3
set rs=createobject("adodb.recordset")
rs.cursorlocation=3
rs.cursortype=3
rs.locktype=3
connsql="Provider=SQLOLEDB.1;Password=;Persist Security Info=True;User ID=sa;Initial Catalog=test;Data Source=(local)"
conn.open connsql
sql="select * from a where 1=0"
rs.open sql,conn,,,1
msgbox "eof=" & rs.eof
msgbox "bof=" & rs.bof
msgbox "not bof and not eof=" & ((not rs.bof) and (not rs.eof))
rs.close
conn.close
set rs=nothing
set conn=nothing
这段代码你可以存为vbs测试一下,我的测试结果是
eof=TRUE
Bof=TRUE
not bof and not eof=FALSE
和你的情况不一样
或许就如同你说的 当SQL SERVER服务器CPU符合过高时 造成的
你可以从游标类型,锁定类型,客户端游标设置,是否设置了异步方式看看能否找到确实原因
我问的是在服务器CPU负荷为100%的情况下,SELECT返回的结果按正常来说应该是没有记录的,这时BOF和EOF都应为TRUE,可是实际情况相反。我要问的是这个情况是为什么!
你可以从游标类型,锁定类型,客户端游标设置,是否设置了异步方式看看能否找到确实原因
-----------------------------
这是我回答的时候提供的一个解决思路,我提到客户端游标的问题,和异步方式。如果你认为这些对你解决问题没有任何帮助,但为何在后面的回复其他人提问中又提到了服务端游标和客户端游标的问题?如果我确有过错,我不会回避,理解问题并解决问题本身就是建立在互相沟通以及提供更多相关信息的基础之上。但是如果我的回答中的提供了部分思路,你确认为我仍然没有理解,那为何不提供更多有关问题的信息,也许更多朋友会参与进来提供解决方案。
现在的问题是,当SQL SERVER服务器CPU符合过高时,且实际并没有符合条件的记录,可是not rs.bof and not rs.eof这个条件却为真。
-----------------------------------
你的问题分解如下出现问题的场景
1,数据600多万
2,服务端游标
3, select语句
4。sql server 服务器CPU负荷过高
5。select查询返回结果没有符合条件的
问题
6。使用标准的判断结果集是否为空的检查结果与预期相反
(not rs.bof and not rs.eof这个条件为真)
------------------
这是我对你问题的理解。我首先进行了模拟场景的测试,并得到与你的问题相反的结果我提供了几个思路供你从游标,锁定类型,是否异步模式几个方面查找,难道这样也有错误吗?即便我所理解的是错误的,你完全可以指出错误在哪里,然后提供更多信息。心平气和的解决问题,而不是互相指责。