我的数据库是oracle 有个设备表的数据量有1000万条左右,需要绑定到gridview显示,或者绑定在别的地方也行,并在页面可以显示分页,我自己做的绑定小数据量还行,多了就不行了,有哪位达人有没好的解决方案?万分感谢!附例子最好!

解决方案 »

  1.   

    不用一次取1000万条,用select top的方式来取数据,要多少取多少。
      

  2.   

    CREATE   PROCEDURE   pagination   @tblName   varchar(255),   --   表名   @strGetFields   varchar(1000)   =   "* ",   --   需要返回的列   @fldName   varchar(255)= " ",   --   排序的字段名   @PageSize   int   =   10,   --   页尺寸   @PageIndex   int   =   1,   --   页码   @doCount   bit   =   0,   --   返回记录总数,   非   0   值则返回   @OrderType   bit   =   0,   --   设置排序类型,   非   0   值则降序   @strWhere   varchar(1500)   =   " "   --   查询条件   (注意:   不要加   where)   AS   declare   @strSQL   varchar(5000)   --   主语句   declare   @strTmp   varchar(110)   --   临时变量   declare   @strOrder   varchar(400)   --   排序类型   
    if   @doCount   !=   0   begin   if   @strWhere   != " "   set   @strSQL   =   "select   count(*)   as   Total   from   "   +   @tblName   +   "   where   "+@strWhere   else   set   @strSQL   =   "select   count(*)   as   Total   from   "   +   @tblName   +   " "   end   --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况   else   begin   
    if   @OrderType   !=   0   begin   set   @strTmp   =   " <(select   min "   set   @strOrder   =   "   order   by   "   +   @fldName   + "   desc "   --如果@OrderType不是0,就执行降序,这句很重要!   end   else   begin   set   @strTmp   =   " >(select   max "   set   @strOrder   =   "   order   by   "   +   @fldName   + "   asc "   end   
    if   @PageIndex   =   1   begin   if   @strWhere   !=   " "   set   @strSQL   =   "select   top   "   +   str(@PageSize)   + "   "+@strGetFields+   "   from   "   +   @tblName   +   "   where   "   +   @strWhere   +   "   "   +   @strOrder   else   set   @strSQL   =   "select   top   "   +   str(@PageSize)   + "   "+@strGetFields+   "   from   "+   @tblName   +   "   "+   @strOrder   --如果是第一页就执行以上代码,这样会加快执行速度   end   else   begin   --以下代码赋予了@strSQL以真正执行的SQL代码   set   @strSQL   =   "select   top   "   +   str(@PageSize)   + "   "+@strGetFields+   "   from   "   +   @tblName   +   "   where   "   +   @fldName   +   " "   +   @strTmp   +   "( "+   @fldName   +   ")   from   (select   top   "   +   str((@PageIndex-1)*@PageSize)   +   "   "+   @fldName   +   "   from   "   +   @tblName   +   " "   +   @strOrder   +   ")   as   tblTmp) "+   @strOrder   
    if   @strWhere   !=   " "   set   @strSQL   =   "select   top   "   +   str(@PageSize)   + "   "+@strGetFields+   "   from   "   +   @tblName   +   "   where   [ "   +   @fldName   +   " "   +   @strTmp   +   "( "   +   @fldName   +   ")   from   (select   top   "   +   str((@PageIndex-1)*@PageSize)   +   "   "   +   @fldName   +   "   from   "   +   @tblName   +   "   where   "   +   @strWhere   +   "   "   +   @strOrder   +   ")   as   tblTmp)   and   "   +   @strWhere   +   "   "   +   @strOrder   end   end   exec   (@strSQL)   
    GO
      

  3.   

     public   DataSet   GetList(int   PageSize,   int   PageIndex,   string   strWhere) 
                    { 
                            IDataParameter[]   parameters   =   new   IDataParameter[]{ 
                                                                                            new   SqlParameter("@tblName",   SqlDbType.VarChar,   255), 
                                                                                            new   SqlParameter("@strGetFields",   SqlDbType.VarChar,   255), 
                                                                                            new   SqlParameter("@fldName",   SqlDbType.VarChar,   255), 
                                                                                            new   SqlParameter("@PageSize",   SqlDbType.Int), 
                                                                                            new   SqlParameter("@PageIndex",   SqlDbType.Int), 
                                                                                            new   SqlParameter("@doCount",   SqlDbType.Bit), 
                                                                                            new   SqlParameter("@OrderType",   SqlDbType.Bit), 
                                                                                            new   SqlParameter("@strWhere",   SqlDbType.VarChar,1000) 
                            }; 
                            parameters[0].Value   =   "CangKuStock   CKS   "; 
                            parameters[1].Value   =   "   CKS.CangKuId,CKS.ProductID,CKS.Quantity,CKS.TradeTime,CKS.Man"; 
                            parameters[2].Value   =   "TradeTime"; 
                            parameters[3].Value   =   PageSize; 
                            parameters[4].Value   =   PageIndex; 
                            parameters[5].Value   =   0; 
                            parameters[6].Value   =   1; 
                            parameters[7].Value   =   strWhere; 
                            return   DbHelperSQL.RunProcedure("pagination",   parameters,   "dtStock"); 
                                          }