本帖最后由 flyso 于 2012-05-17 19:36:08 编辑

解决方案 »

  1.   

    几百万数据也不是都放在DataTable里面的,你应该采用存储过程进行分页,只返回当前页 的数据,采用DataTable、SqlDataReader应该都差不多的
      

  2.   

    大数据分页的关键,在于用SQL分页或存储过程分页,而不是选择DataTable还是DataReader。
      

  3.   

    可以参考一下http://www.cnblogs.com/lzhdim/archive/2009/01/05/1368817.html
      

  4.   

    LZ是用的存储过程分页,应该是存储过程flyso_listpage有问题。贴一下
      

  5.   


    用的是存储过程啊,存储过程是没有问题的,用了几年了,之前用DataTable,现在改成DataReader的方式才出的问题
      

  6.   

    DataReader 
    DataTable
    调用的时候传参数都是一样的,没什么差别的如果你的Pager内容是正确的,就没有问题另外,对照下原先好用的代码处Pagerlist(FlysoPager Pager)函数里面的代码是不是拼写错了或者顺序是否相同
      

  7.   

    存储过程之前也用过百万级的,效率也很高,当时没有用三层架构(直接用的list.DataSource = mySqlCommand.ExecuteReader();),换成三层架构之后就用DataTable了,发现达到百万级之后就变得超级慢,现在想换成SqlDataReader发现有问题,不会用三层架构的SqlDataReader里的用法
      

  8.   

    command.CommandType = CommandType.StoredProcedure; 没写啊
      

  9.   


    没改之前
    //SQL助手类
    public static DataTable ExecuteDataTableList(SqlParameter[] pars)
            {
                using (SqlConnection conn = new SqlConnection(ConnectionString))                try
                    {                   
                        conn.Open();
                        SqlCommand cmd = new SqlCommand("flyso_listpage", conn);
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddRange(pars);
                        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                        DataTable dataTable = new DataTable();
                        adapter.Fill(dataTable);
                        return dataTable;                }
                    catch (Exception)
                    {
                        throw;
                    }
                    finally
                    {
                        conn.Close();
                    }
    //数据层
     //翻页列表
            public DataTable Pagerlist(FlysoPager Pager)
            {
                SqlParameter[] pars = new SqlParameter[9];
                pars[0] = new SqlParameter("@sTable", SqlDbType.VarChar, 30);
                pars[0].Value = Pager.tablename;
                pars[1] = new SqlParameter("@sField", SqlDbType.VarChar, 200);
                pars[1].Value = Pager.Fields;
                pars[2] = new SqlParameter("@sCondition", SqlDbType.VarChar, 500);
                pars[2].Value = Pager.Condition;
                pars[3] = new SqlParameter("@sPkey", SqlDbType.VarChar, 150);
                pars[3].Value = Pager.MKey;
                pars[4] = new SqlParameter("@sOrder", SqlDbType.VarChar, 50);
                pars[4].Value = Pager.Order;
                pars[5] = new SqlParameter("@iPageCurr", SqlDbType.Int);
                pars[5].Value = Pager.intPageNo;
                pars[6] = new SqlParameter("@iPageSize", SqlDbType.Int);
                pars[6].Value = Pager.intPageSize;
                pars[7] = new SqlParameter("@iRecordCount", SqlDbType.Int);
                pars[7].Value = Pager.RecordCount;
                pars[8] = new SqlParameter("RowCount", SqlDbType.Int);
                pars[8].Direction = ParameterDirection.ReturnValue;
                return SqlHelper.ExecuteDataTableList(pars);                    
      

  10.   

    本帖最后由 net_lover 于 2012-05-17 20:54:06 编辑
      

  11.   

    本帖最后由 net_lover 于 2012-05-17 21:04:34 编辑
      

  12.   

    用max分页法,效率非常高,网上搜索下。
      

  13.   


    问题解决了,把AWE打开了就快了,200毫秒了