一个表有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这个条件却为真。为什么?

解决方案 »

  1.   

    if  not rs.eof then
    就可以了,你那种方式,只有数据游标向前向后都可能跳转的,才需要判断
    如果select之后,就判断,仅仅需要eof
      

  2.   

    楼上的请看清问题再回答。出现这种情况时,BOF和EOF都为FALSE。
      

  3.   

    楼主激动了一点
    --------------
    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符合过高时 造成的
    你可以从游标类型,锁定类型,客户端游标设置,是否设置了异步方式看看能否找到确实原因
      

  4.   

    正常情况来说,如果SELECT返回的结果是有记录的,那么BOF和EOF都为FALSE。
    我问的是在服务器CPU负荷为100%的情况下,SELECT返回的结果按正常来说应该是没有记录的,这时BOF和EOF都应为TRUE,可是实际情况相反。我要问的是这个情况是为什么!
      

  5.   

    请注意,我的问题不是BOF和EOF的判断语法问题!请仔细看问题的描述!
      

  6.   

    模拟测试了楼主的CPU负荷高的时候,接近100%,数据量600万,进行查询,没有出现楼主的情况。只是在设置了异步模式的时候,rs的各种属性的值有变化,但也没有出现楼主的情况顺便提个建议,楼主的情绪还是平和一些,能理解你遇到问题,却暂时无法解决的烦躁,但同样心平气和的解决问题不是一件难事,即便别人的建议你不认同,请保持心平气和
      

  7.   

    to dljinsui(风在发端),我还懒的理你,回答问题没看清问题就象模象样的回答一通,是卖弄还是怎么?
      

  8.   

    to hui_hui_2007(平安是福),上一记录集一定关闭了,用的是服务端游标。请详细解释这种情况可能和游标的关系。
      

  9.   

    to vieri_ch(尘雨-自在飞花轻似梦,无边丝雨细如愁),你没看清问题就乱回答一通,请先反省你自己的错误先。
      

  10.   

    可能我的回答没有解决你的问题,而你认为我的过错在于没有看清楚并理解你的问题?或许就如同你说的 当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这个条件为真)
    ------------------
    这是我对你问题的理解。我首先进行了模拟场景的测试,并得到与你的问题相反的结果我提供了几个思路供你从游标,锁定类型,是否异步模式几个方面查找,难道这样也有错误吗?即便我所理解的是错误的,你完全可以指出错误在哪里,然后提供更多信息。心平气和的解决问题,而不是互相指责。