SqlDataReader.FieldCount是列数,我要的是行数

解决方案 »

  1.   

    private int GetDataReaderCount(SqlDataReader dr)
    {
    int i=0;
    while(dr.Read())
       i+=1;return i;
    }
      

  2.   

    查询出总记录数的目的是想用得到的记录数作为数组的大小,如果指定数组的大小,就通过,但是用了楼上的方法,出了个奇怪的错,帮忙看看吧:(已经注释在程序中),谢谢!非常头痛!错误信息是:“未处理的“System.Exception”类型的异常出现在 Banding.exe 中
    附加信息:数据库操作发生错误!没有该用户!”
    public class DBMgr //操作数据库的类
    {
      MyItem[] aMyItems; //MyItem是自定义的类
      MyItem item;  private int GetDataReaderCount(SqlDataReader dr)
      {
        int  i=0;
        while(dr.Read())
          i+=1;
        return  i;
      }
      
      public MyItem[] SelectFromDB(string selectStr)
     {
        SqlConnection myconn=ConnSql.SetConn(); 
        myconn.Open();
                
        try
       {
          SqlCommand mycmd = new SqlCommand(selectStr,myconn);
          sqlDataReader mysqlreader = mycmd.ExecuteReader();
          int k = GetDataReaderCount(mysqlreader);  //计算总记录数
          
          if(mysqlreader.Read())
         { 
            int i=0;
            aMyItems=new MyItem[k];  //用总记录数作为数组的大小
            //如果指定数组大小就没问题 aMyItems=new MyItem[100]; 
            int count=0;
            while(mysqlreader.Read())
           {  
     item=new MyItem();  
     item.ID=(int)mysqlreader["ID"];  item.Name=mysqlreader["USERNAME"].ToString();
     aMyItems[i++]=item;
              count+=1;
            }
          }
          else
         {
             throw(new Exception("没有该用户!"));
          }
        }
        catch(Exception E)
       {
          throw(new Exception("数据库操作发生错误!"+ E.Message));
       }
       myconn.Close();
       return aMyItems;
    }
    }