对于过万条的记录怎么显示。
还用DATASET吗?

解决方案 »

  1.   

    以上方法都可以。
    如果查询需求不大图省事可以直接用DATASET。
    比较频繁建议使用存储过程
      

  2.   

    用DataSet会不会占用内存,或速度慢效率低。一个面试题,十W条以上的记录,怎么显示,有哪些方案
      

  3.   

    如果只是显示的话,存储过程+DataReader
      

  4.   

    这里不能使用DataSet,应为DataSet数据本地缓存所以你如果有大量的数据必定会使应用软件的效率大大降低,在这里你可以使用两种方式。
      第一:使用存储过程进行分页,但是存储过程中不能出现“NOT IN”字样,虽然这里可以使用“not exists” 来代替“NOT IN”但是二者的执行效率实际上是没有什么区别的。影响我们查询速度的关键因素有两点:TOP和NOT IN。TOP可以提高我们的查询速度,而NOT IN会减慢我们的查询速度,所以要提高我们整个分页算法的速度,就要彻底改造NOT IN,同其他方法来替代它。比如通过max(字段)或min(字段)来提取某个字段中的最大或最小值,所以如果这个字段不重复,那么就可以利用这些不重复的字段的max或min作为分页算法中分开每页的参照物。
     第二:如果是以只进只读方式返回数据那么你可以使用DataReader,虽然 DataAdapter 使用 DataReader 来填充 DataSet 的内容,但可以使用 DataReader 来提高性能,因为您将节省DataSet 所使用的内存,并将省去创建 DataSet 并填充其内容所需的必要处理。
      

  5.   

    问一下SELECT_SUN() 
    怎么样得用存储过程分页呢
      

  6.   

    /*****************************************************
    存储过程名称:pagination
    功能:通用分页
    返回值:无
    参数:
    1.表名(字符串,必要参数)
    2.主键或者唯一约束字段(字符串,必要参数)
    3.需不需要进行总数统计.(布尔类型,可选参数,默认为1。
    1或者true是只统计总条数,不进行查询,  
    0或者false进行分页查询,不进行统计)
    4.查询条件(字符串,可选参数,默认为无条件查询。
    注意不要加where)
    5.排序的字段名(字符串,可选参数,默认按照主键排序)
    6.页码(整数,可选参数,默认第1页)
    7.每页大小(整数,可选参数,默认每页10条记录)
    8.排序类型(整数或布尔,可选参数,默认升序排序
    1或true按降序排序
    0或false按升序排列)
    9.需要返回的列(字符串,可选参数,默认返回所有列)
    *****************************************************/
    CREATE PROCEDURE pagination
    @TableName varchar(255), -- 表名
    @PrimaryKey varchar(255),--主键或者唯一约束字段
    @DoCount bit = 0, -- 需不需要进行总数统计.1是只统计总条数,不进行查询  0进行分页查询,不进行统计
    @StrWhere varchar(1500) = '', -- 查询条件 (注意: 不要加 where)@OrderField varchar(255)=@PrimaryKey, -- 排序的字段名,默认按照主键排序
    @PageIndex int = 1, -- 页码
    @PageSize int = 10, -- 页尺寸
    @OrderType bit = 0 ,-- 设置排序类型, 非 0 值则降序
    @StrGetFields varchar(1000) = '*'-- 需要返回的列 
    ASdeclare @strSQL varchar(5000) -- 主语句
    declare @strTmp varchar(110) -- 临时变量
    declare @strOrder varchar(400) -- 排序类型/********************************************
    @DoCount传递过来的不是0,就执行总数统计
    ********************************************/
    if @DoCount != 0
    begin
    if @StrWhere!=''
    set @strSQL = 'select count(*) as Total from ' + @TableName + ' where '+@strWhere
    else
    set @strSQL = 'select count(*) as Total from ' + @TableName 
    end
    /********************************************
    以下的所有代码都是@DoCount为0的情况:
    ********************************************/
    else
    begin
    /********************************************
    确定是升序还是降序
    ********************************************/
    if @OrderType != 0
    begin
    set @strTmp = '<(select min'
    set @strOrder = 'order by ' + @OrderField +' desc'
    end else
    begin
    set @strTmp = '>(select max'
    set @strOrder = 'order by ' + @OrderField +' asc'
    end /**********************************************
    为了加快执行速度,判断一下是不是第一页
    ***********************************************/
    if @PageIndex = 1
    begin
    if @strWhere != '' 
    set @strSQL ='select top ' + str(@PageSize) +' '+@StrGetFields+ ' from ' + @TableName + ' where ' + @strWhere + ' ' + @strOrder
    else
    set @strSQL ='select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @TableName + ' '+ @strOrder
    end
    /**********************************************
    不是第一页
    ***********************************************/
    else
    begin
    if @strWhere=''
    set @strSQL='select top '+str(@PageSize)+' '+@strGetFields+' from '+ @TableName +' where '+@PrimaryKey+@strTmp+'('+@PrimaryKey+') as '+@PrimaryKey+' from (select top '+str((@PageIndex-1)*@PageSize)+' '+@PrimaryKey+' from '+@TableName+' '+@strOrder+') as T) '+@strOrder
    else
    set @strSQL='select top '+str(@PageSize)+' '+@strGetFields+' from '+ @TableName +' where '+@PrimaryKey+@strTmp+'('+@PrimaryKey+') as '+@PrimaryKey+' from (select top '+str((@PageIndex-1)*@PageSize)+' '+@PrimaryKey+' from '+@TableName+' where '+@StrWhere+' '+@strOrder+') as T) and '+@StrWhere+' '+@strOrder

    endprint @strSQL
    end
    execute(@strSQL)
      

  7.   

    set @strSQL='select top '+str(@PageSize)+' '+@strGetFields+' from '+ @TableName +' where '+@PrimaryKey+@strTmp+'('+@PrimaryKey+') as '+@PrimaryKey+' from (select top '+str((@PageIndex-1)*@PageSize)+' '+@PrimaryKey+' from '+@TableName+' '+@strOrder+') as T) '+@strOrder这句好像是关键的,能不能讲一下什么个意思