日期:2014-05-18  浏览次数:20388 次

DataReader.read()的问题
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: 未将对象引用设置到对象的实例。

我发现好象第一次执行是可以执行的,但第二次执行就这样出错了

------解决方案--------------------
第一次用完之后没有关掉,第二次重复打开引发了异常dr就Close掉了
------解决方案--------------------
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
把参数去掉
------解决方案--------------------
C# code
    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();
        }
    }