不用存儲實現的分頁,效率和存儲過程一樣

/// <summary>
      /// 獲得分頁操作sql語句(對於排序的字段必須建立索引)
      /// </summary>
      /// <param name="tblname">操作表名</param>
      /// <param name="fldname">操作索引字段名稱</param>
      /// <param name="pageindex">當前頁</param>
      /// <param name="pagesize">每頁顯示記錄數</param>
      /// <param name="rtnfields">返回字段集合,中間用逗號格開。返回全部用“*”</param>
      /// <param name="ordertype">排序方式,0升序,1爲降序</param>
      /// <param name="strwhere">檢索的條件語句,不需要再加where要害字</param>
      /// <returns></returns>
      public static string constructsplitsql(string tblname, 
                                    string fldname, 
                                    int pageindex, 
                                    int pagesize, 
                                    string rtnfields, 
                                    int ordertype, 
                                    string strwhere)
      {
         string strsql = "";
         string stroldwhere = "";

         // 構造檢索條件語句字符串
         if( strwhere != "" )
         {
            stroldwhere = " and " + strwhere + " ";

            strwhere = " where " + strwhere + " ";
            // 去除不合法的字符,防止sql注入式攻擊
            strwhere = strwhere.replace("'", "''");
            strwhere = strwhere.replace("--", "");
            strwhere = strwhere.replace(";", "");
         }

         // 升序操作
         if( ordertype == 0 )
         {
            if( pageindex == 1 )
            {
               strsql += "select top " + pagesize + " " + rtnfields + " from " + tblname + " ";
               strsql += strwhere + "order by " + fldname + " asc";
            }
            else
            {
               strsql += "select top " + pagesize + " " + rtnfields + " from " + tblname + " ";

               strsql += "where (" + fldname + " > ( select max(" + fldname + ") from (select top " + ((pageindex - 1)*pagesize) + " " + fldname + " from " + tblname + strwhere + " order by " + fldname + " asc ) as t )) ";
            
               strsql += stroldwhere + "order by " + fldname + " asc";
            }
         }
         // 降序操作
         else if( ordertype == 1 )
         {
            if( pageindex == 1 )
            {
               strsql += "select top " + pagesize + " " + rtnfields + " from " + tblname + " ";
               strsql += strwhere + "order by " + fldname + " desc";
            }
            else
            {
               strsql += "select top " + pagesize + " " + rtnfields + " from " + tblname + " ";

               strsql += "where (" + fldname + " < ( select min(" + fldname + ") from (select top " + ((pageindex - 1)*pagesize) + " " + fldname + " from " + tblname + strwhere + " order by " + fldname + " desc ) as t )) ";
            
               strsql += stroldwhere + "order by " + fldname + " desc";
            }
         }
         else // 異常處理
         {
            throw new dataexception("未指定任何排序類型。0升序,1爲降序");
         }

         return strsql;
      }

調用代碼:cs文件的,參考。。


dataprovider dp = null;
         user.datatype = "sqlclient";
         user.connectionstring = "server=(local); uid=sa; pwd=1016; database=skyboard";

         dp = user.instancedataprovider();

         string strcmd = "select count(id) from [address]";

         int totalrecord = 1198954;
         int pagesize = 20;
         int pageindex = (request.querystring["page"] == null) ? 1 : int.parse(request.querystring["page"]);

         int pagenum = 0;

         if(totalrecord % pagesize == 0)
         {
            pagenum = totalrecord/pagesize;
         }
         else
         {
            pagenum = (totalrecord/pagesize) + 1;
         }

         //strcmd = string.format(seaskyer.fso.fobject.readfile(@"e://a.txt"), pagesize * (pageindex - 1) + 1);
         strcmd = seaskyer.strings.function.constructsplitsql("address", "id", pageindex, pagesize, "*", 1, "");


         response.write(strcmd);
         datatable dt = dp.datatablesql(strcmd);

         response.write("共有" + totalrecord + ", " + user.splitpages("test.aspx?", pageindex, pagenum, totalrecord ));

         
         datagrid1.datasource = dt.defaultview;
         datagrid1.databind();

         dt.clear();
         dt.dispose();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章