private void pageload()
    {
        strqry = "Select top 5 * From T_Product order by id desc";
        OleDbDataReader dr;
        dr = DBFun.dataReader(strqry);
       while(dr.Read()) //出错行:未将对象引用设置到对象的实例
       { //标题  
           texts += dr["ProductName"].ToString() + "|"; 
        //链接  links += "ShowImageNews.aspx?id="+id+"|"; //这里根据你的链接情况修改 
         links = "";
        //图片地址 
         pics += "uploadpic/" + dr["ProductPic"].ToString() + "|";
       } 
    }
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。以下是方法:
 public static OleDbDataReader dataReader(string sqlstr)
    {
        OleDbDataReader dr = null;
        try
        {
            openConnection();
            comm.CommandText = sqlstr;
            comm.CommandType = CommandType.Text;
            dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
        }
        catch
        {
            try
            {
                dr.Close();
                closeConnection();
            }
            catch
            {
            }
        }
        return dr;
    }

解决方案 »

  1.   

    DBFun.dataReader返回的是null
    if(dr!=null)
    {while(dr.Read())
      { //标题   
    ...
    }
    }
      

  2.   

    这个是你dr为空造成的, 你在 while()循环外面  判断一下   if(dr!=null){ while()....   } 这样就不会报错了
      

  3.   

    dataReader()返回了null在dataReader()中的某个try catch中出现了异常,单步调试下。
      

  4.   

    但是我把sql语句放到数据库里,查询的结果不是null
      

  5.   

    public static OleDbDataReader dataReader(string sqlstr)
    你把这个里面的try catch都注释掉,看看什么错误。
      

  6.   

    dr = comm.ExecuteReader(CommandBehavior.CloseConnection);System.InvalidOperationException: 已有打开的与此命令相关联的 DataReader,必须首先将它关闭。
      

  7.   

     dr.Close();  dr.Read() 是必须读取完之后才能关闭的,方法里面去掉这一句   到while循环外面在加上这一句
      

  8.   

    openConnection();的代码的是什么?两个DataReader不能共享一个Connection。
      

  9.   


    你看一下你的方法 public static OleDbDataReader dataReader(string sqlstr)
    你把colse放在catch里面,那就是说只有出错的时候才会执行
      

  10.   

    我估计是Try catch引起的, dataReader用了两个,去掉试试
      

  11.   

    public static OleDbDataReader dataReader(string sqlstr)
      {
      OleDbDataReader dr = null;
      try
      {
      openConnection();
      comm.CommandText = sqlstr;
      comm.CommandType = CommandType.Text;
      dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
      }
      catch
      {
      try
      {
      dr.Close();  //读取完之后才关掉哦.
    closeConnection();
      }
      catch
      {
      }
      }
      return dr;
      }
      

  12.   

    你的代码我己经没有兴趣改了,放一个通用型的
    /// <summary>
            /// 执行查询语句,返回OleDbDataReader
            /// </summary>
            /// <param name="strSQL">查询语句</param>
            /// <returns>OleDbDataReader</returns>
            public static OleDbDataReader ExecuteReader(string strSQL)
            {
                OleDbConnection connection = new OleDbConnection(connectionString);
                OleDbCommand cmd = new OleDbCommand(strSQL, connection);
                try
                {
                    connection.Open();
                    OleDbDataReader myReader = cmd.ExecuteReader();
                    return myReader;
                }
                catch (System.Data.OleDb.OleDbException e)
                {
                    throw new Exception(e.Message);
                }        }
      

  13.   

    我其实是不喜欢用DataReader的,因为你用了这个,必须在调用后,还要记得关闭他,但很多时候你在方法体内没有关,掉用完后又忘记关,所以不太好,最好是返回DataSet或是DataTable
      

  14.   

    dr.Close(); //读取完之后才关掉哦.怎么关掉
      

  15.   

    返回DataSet或是DataTable后怎么才能把字段拼接起来pics += "uploadpic/" + dr["ProductPic"].ToString() + "|";
      

  16.   

    现在可以了,但是还有一个问题,返回的结果是这样的
    var files = 'uploadpic/201004\20100423.JPG|uploadpic/201004\201004165.JPG|uploadpic/201004\201004395.JPG|uploadpic/201004\201004597.JPG|uploadpic/201004\201004300.JPG|';
    图片路径有问题,这个怎么改
      

  17.   

    数据库里面的字段,只要有一个字段值是null,不管其他的有值不,它就走catch了,全赋值试试看。
      

  18.   

    得到的结果是这样的:uploadpic/201004\20100423.JPG应该是:uploadpic/201004/20100423.JPG
      

  19.   

    pics += "uploadpic/" + dr["ProductPic"].ToString().Replace("\\", "/") + "|";