在执行dataGrid的DataBind方法之前不要Close连接和Reader就行了

解决方案 »

  1.   

    用DataReader,为什么?建议用OleDbDataAdapter放在一个方法里,返回Datatable
      

  2.   

    DataReader性能更高,速度更快,占用内存更小,所以能用DataReader就尽量用DataReader。
      

  3.   

    sorry, DataReader我嫌操作麻烦
      

  4.   

    DataReader必须在连接不关闭的状态的才能够使用。即要在帮定之后才可以释放连结
    .ExecuteReader()
      

  5.   

    to:yypt111(游吟诗人) 
    如果熟悉操作DataReader,那么它并不比DataTabel或DataSet操作起来更麻烦,我不知道你说的麻烦是指什么?
      

  6.   

    DataReader 特别好用!我爱!
    注意 你可以用 reader.Read() 来判断 数据库是否空!
      

  7.   

    BindDataGrid()
    {
        string autCod,autNam,sysNbr;
        autCod = AuthorityQuery.AuthorityCode ;
        autNam=AuthorityQuery.AuthorityName ;
        sysNbr=AuthorityQuery.SystemNumber ;
        dgAuthority.DataSource = PBAuthority.Select(autCod,autNam,sysNbr);
        dgAuthority.DataBind ();//dgAuthority 为DataGrid类型,系统在这里报错,但我并没有关闭datareader和连接
    }//PBAuthority类的定义
    public Class PBAuthority
    {
       public static SqlDataReader Select(string autCod,string autNam,string sysNbr)
          {
              SqlParameter[] sqlParams=new SqlParameter[3];
    sqlParams[0]=new SqlParameter("@AutCod",autCod);
    sqlParams[1]=new SqlParameter("@AutNam",autNam);
    sqlParams[2]=new SqlParameter("@SysNbr",sysNbr);
    StoredProcedure sproc=new StoredProcedure  (PBConstDefine.STOREPROC_AUTSLT,sqlParams);
    return sproc.RunReader ();
    }
    }//storeprocedure的定义
    internal class StoredProcedure : IDisposable
    {
       public SqlCommand command;
       public StoredProcedure( string sprocName, SqlParameter[] parameters )
         {
           command = new SqlCommand( sprocName, new SqlConnection( CMBNJISConfiguration.ConnectionString ) );
           command.CommandType = CommandType.StoredProcedure;
           foreach ( SqlParameter parameter in parameters )
    command.Parameters.Add( parameter );
    command.Parameters.Add( 
    new SqlParameter( "ReturnValue",
    SqlDbType.Int,
    /* int size */ 4,
    ParameterDirection.ReturnValue,
    /* bool isNullable */ false,
    /* byte precision */ 0,
    /* byte scale */ 0,
    /* string srcColumn */ string.Empty,
    DataRowVersion.Default,
    /* value */ null 
    ));
    command.Connection.Open();
    }   public SqlDataReader RunReader()
       {
          if ( command == null )
    throw new ObjectDisposedException( GetType().FullName );
           return command.ExecuteReader( CommandBehavior.CloseConnection );//注:调用此方法时出错,改为以下方法时不出错,请各位高手诊断
           //return command.ExecuteReader();
        }
      

  8.   

    BindDataGrid()
    {
        SqlDataReader dr;    string autCod,autNam,sysNbr;
        autCod = AuthorityQuery.AuthorityCode ;
        autNam=AuthorityQuery.AuthorityName ;
        sysNbr=AuthorityQuery.SystemNumber ;
        dr = PBAuthority.Select(autCod,autNam,sysNbr);    dgAuthority.DataSource = dr;
        dgAuthority.DataBind ();//dgAuthority 为DataGrid类型,系统在这里报错,但我并没有关闭datareader和连接    dr.Close();
    }注意:上面有三处进行了改动;
      

  9.   

    对了,将 dr.Close();放到调用了BindDataGrid()方法之后来用就可以了
      

  10.   

    但同时要将SqlDataReader dr;放到外面去声明;