HasRows属性 msdn里定义是:取一个值,指示SqlDataReader是否包含一行或多行我做了一个查询语句,查询条件是数据库中的一条存在的记录按理说,if (com.HasRows)返回的值是true,就不会执行else的命令了,可事实确是相反用com.Read()确没有这样的问题
哪位能指示下

解决方案 »

  1.   

    HasRows是找到对应的列再返回true,返回了这个 自然不会执行else了.理论上是这样的,不关对不对。都帮你顶上来吧。记得加分喔 嘿嘿。
      

  2.   

    HasRows:
    datareader.read();
    if(datareader.HasRows)
    ..
    else
    ..Read:
    while(datareader.read())
    {
    }
      

  3.   

    datareader.HasRows 只是检则库中是否有记录,如果有则返回true,还得再用read()读取.
    datareader.read()为从数据开头往后读,如果库中已读到结尾了(可能没有记录)则返回false,如果用在if中,则会自动读出一条,else里则不必再用read(),如果有while(含有read()条件),则自动从第二条开始往下读
    结论:单条可用read()检测,多条用到while时用HasRows检测...结贴吧
      

  4.   

    但是这样哦,我用以下步骤获得DataReader后:
    {
    string SQL=“”;
    oledbcommand Cmd=new Cmd(SQL,ConnString);
    oledbdatareader Dr=Cmd.executereader();
    }
    如果我用if (Dr.Read())去判断是否返回记录,然后读取的话,总是少了1条记录的,怎么回事呢?!
    想请教的问题是,究竟DataReader.Read()方法最初所指向的是哪条记录呢?(0还是-1 ?)
    谢谢!
      

  5.   

    调用read(),游标已到下一条记录(如果有的话),有一条记录和没有记录都返回false,所以不能判断com是否为空,我的解决方案笨了点,但没有更好的办法之前只能这样了,在数据表里预置一条记录(sql语句加入排序字段a的值:"0000"),查询语句条件中加入or a = '0000' ORDER BY a ASC,这样多出来的这条记录就可以让我们来判断需要的目标数据是否存在了