aa类里做了一个方法
public static OleDbDataReader getdr(string sql)  
    {
        OleDbDataReader dr = null;
        try
        {
            conopen();  //打开数据库
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sql;
            dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }
        catch
        {
                dr.Close();
        }
        return dr;
    }然后在另一页里调用
              string sql = "select * from usetb where uid='"+sid+"'";
            OleDbDataReader dr = aa.getdr(sql);
            if (dr.Read())            //这里就出错了
            {....    }
            else
            {.....}
调试时提示用户代码未处理InvalidOperationException
{"阅读器关闭时尝试调用 Read 无效。"}正常运行时提示
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。我发现好象第一次执行是可以执行的,但第二次执行就这样出错了

解决方案 »

  1.   

    第一次用完之后没有关掉,第二次重复打开引发了异常dr就Close掉了
      

  2.   

    dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
    把参数去掉
      

  3.   

        public static OleDbDataReader getdr(string sql)
        {
            OleDbDataReader dr = null;
            try
            {
                conopen();  //打开数据库 
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = sql;
                return dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch
            {
                throw new Exception("AA");
            }
            finally
            {
                dr.Close();
            }
        } 
      

  4.   

    楼主需要给command 指定connection
    但是你代码里边又没有connction,所以不知道怎么帮你改了 conopen();  //打开数据库 
                cmd.CommandType = CommandType.Text; 
                cmd.CommandText = sql; cmd.Connection=楼主conneciton推荐写法:
    OleDbConnection connection = new OleDbConnection(connectionString);
       OleDbCommand command = new OleDbCommand(queryString, connection);
       connection.Open();
       OleDbDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
       while(reader.Read()) 
       {
          Console.WriteLine(reader.GetString(0));
       }
       reader.Close(); 
      

  5.   

    public void CreateMyOleDbDataReader(string queryString,string connectionString) 
    {
       OleDbConnection connection = new OleDbConnection(connectionString);
       OleDbCommand command = new OleDbCommand(queryString, connection);
       connection.Open();
       OleDbDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
       while(reader.Read()) 
       {
          Console.WriteLine(reader.GetString(0));
       }
       reader.Close();
       //Implicitly closes the connection because CommandBehavior.CloseConnection was specified.
    }
      

  6.   

    把 catch 以他的 {}  都去掉就可以了
      

  7.   

    datareader在读时始终是连接的...