저장 프로세스 페이지 나누기 간단한 예

그동안 프로젝트를 했는데 데이터량이 많을 때 페이지를 나누는 효과가 적지 않아서 저장 프로세스를 최적화시켜 채소 새들과 함께 발전해 봅시다.
저장 프로시저:
   
   
   
   
  1. set ANSI_NULLS ON  
  2. set QUOTED_IDENTIFIER ON  
  3. go  
  4.  
  5. /*  
  6. Descript:  
  7. Author:Blue.Dream  
  8. Date:2004-8-18 21:01  
  9. */  
  10. ALTER  PROCEDURE [dbo].[ListPage](  
  11. @tblName     nvarchar(200),                 ----  
  12. @fldName     nvarchar(200) = '*',             ----  
  13. @pageSize    int = 10,                          ----  
  14. @page        int = 1,                 ----  
  15. @pageCount    int = 1 output,             ----]  
  16. @Counts    int = 1 output,                 ----  
  17. @fldSort    nvarchar(100) = null,             ----  
  18. @Sort        bit = 0,                 ---- ,0 ,1  
  19. @strCondition    nvarchar(200) = null,    ---- , where  
  20. @ID        nvarchar(50)        ----  
  21. )  
  22. AS  
  23. SET NOCOUNT ON  
  24. Declare @sqlTmp nvarchar(1000)        ---- SQL  
  25. Declare @strTmp nvarchar(1000)        ----  
  26. Declare @strID     nvarchar(1000)        ---- ID  
  27. Declare @sqlSort nvarchar(200)        ----  
  28. Declare @intCounts int            ----  
  29. Declare @BeginID int            ---- ID  
  30. Declare @EndID   int            ---- ID  
  31.  
  32.  
  33.  
  34. -------- ---------  
  35. if @Sort=0        --  
  36. begin  
  37.       if not(@fldSort is null)  
  38.         set @sqlSort = ' Order by ' + @fldSort      
  39.       else  
  40.         set @sqlSort = ' Order by ' + @ID    
  41. end  
  42. else            --  
  43. begin  
  44.     if not(@fldSort is null)  
  45.         set @sqlSort = ' Order by ' + @fldSort + ' DESC'          
  46.     else  
  47.         set @sqlSort = ' Order by ' + @ID + ' DESC '  
  48. end  
  49.  
  50.  
  51. -------- --------  
  52. -- @strTmp  
  53. if @strCondition is null    --  
  54.     begin  
  55.     set @sqlTmp =  @fldName + ' From ' + @tblName  
  56.     set @strTmp = 'select @Counts=Count(' + @ID + ') FROM '+@tblName  
  57.     set @strID = ' From ' + @tblName  
  58.     end  
  59. else  
  60.     begin  
  61.     set @sqlTmp = + @fldName + ' From ' + @tblName   
  62.     set @strTmp = 'select @Counts=Count(' + @ID + ') FROM '+@tblName + ' where ' + @strCondition  
  63.     set @strID = ' From ' + @tblName + ' where ' + @strCondition  
  64.     end  
  65.       
  66.  
  67.  
  68. ---- -----  
  69. exec sp_executesql @strTmp,N'@Counts int out ',@Counts out  
  70.  
  71. --  
  72. if @Counts <= @pageSize  
  73.     set @pageCount = 1 
  74. else  
  75.     set @pageCount = (@Counts / @pageSize) + 1  
  76.  
  77.  
  78. --  
  79. if @page = 1   
  80.     set @intCounts = @pageSize  
  81. else  
  82. begin  
  83.     set @intCounts = (@page-1) * @pageSize + 1  
  84. end  
  85.  
  86. ----- ID  
  87. set @strID = 'select @BeginID=' + @ID + ' ' + @strID  
  88.  
  89.  
  90.  
  91. set @intCounts = @intCounts - @pageSize + 1  
  92. set rowcount  @intCounts  
  93. exec sp_executesql @strID,N'@BeginID int out ',@BeginID out  
  94.  
  95. ----- ID  
  96. set @intCounts = @intCounts + @pageSize - 1  
  97. print @intCounts  
  98. set rowcount  @intCounts  
  99. exec sp_executesql @strID,N'@BeginID int out ',@EndID out  
  100.  
  101.  
  102. ------ -----  
  103. set rowcount  0  
  104. SET NOCOUNT OFF  
  105.  
  106. ------ -----  
  107. if @strCondition is null  
  108.     set @strTmp = 'select ' + @sqlTmp + ' where ' + @ID + ' between ' + str(@BeginID) + ' and ' + str(@EndID)  
  109. else  
  110.     set @strTmp = 'select ' + @sqlTmp + ' where ' + @ID +' between ' + str(@BeginID) + ' and ' + str(@EndID)  + ' and  ' + @strCondition  
  111.  
  112. if not(@sqlSort is null)  
  113. set @strTmp = @strTmp + @sqlSort  
  114. exec sp_executesql @strTmp  
  115.  

 
dal 레이어 호출:
   
   
   
   
  1. public DataTable Select(string LDXX, string ZXBH, string JTBZ, string CLBZ, string KSSJ, string JSSJ, int CurrentPageIndex, string orderPX, out int count, out int totlepage)  
  2.        {  
  3.  
  4.            StringBuilder strSql = new StringBuilder();  
  5.            StringBuilder strtj = new StringBuilder();  
  6.            StringBuilder st = new StringBuilder();  
  7.  
  8.            if (!string.IsNullOrEmpty(ZXBH))  
  9.            {  
  10.  
  11.                strtj.Append(" ZXBH =  " + int.Parse(ZXBH) + " and ");  
  12.  
  13.            }  
  14.  
  15.            if (!string.IsNullOrEmpty(JTBZ))  
  16.            {  
  17.                strtj.Append(" JTBZ = " + JTBZ + "  and ");  
  18.  
  19.            }  
  20.            if (!string.IsNullOrEmpty(CLBZ))  
  21.            {  
  22.                strtj.Append(" CLBZ = " + CLBZ + " and ");  
  23.  
  24.            }  
  25.  
  26.            if (!string.IsNullOrEmpty(KSSJ))  
  27.            {  
  28.  
  29.                strtj.Append("   LDSJ >='" + DateTime.Parse(KSSJ) + "' and ");  
  30.  
  31.            }  
  32.            if (!string.IsNullOrEmpty(JSSJ))  
  33.            {  
  34.  
  35.                strtj.Append("  LDSJ >='" + DateTime.Parse(JSSJ) + "' and ");  
  36.  
  37.            }  
  38.  
  39.            if (!string.IsNullOrEmpty(LDXX))  
  40.            {  
  41.                strtj.Append(" LDXX like '%" + LDXX + "%' and ");  
  42.  
  43.            }  
  44.            strtj.Append(" 11=1 ");  
  45.  
  46.            string strname = "procPageL";  
  47.  
  48.            SqlParameter[] listp =  {  
  49.                                         new  SqlParameter("@TableName",SqlDbType.VarChar,200),  
  50.                                         new  SqlParameter("@ReFieldsStr",SqlDbType.VarChar,200),  
  51.                                          new  SqlParameter("@OrderString",SqlDbType.VarChar,200),  
  52.                                           new  SqlParameter("@WhereString",SqlDbType.VarChar,200),  
  53.                                         new  SqlParameter("@pageSize",SqlDbType.Int,4),  
  54.                                          new  SqlParameter("@PageIndex",SqlDbType.Int,4),  
  55.                                         new SqlParameter("@TotalRecord",SqlDbType.Int,4)                                   };  
  56.            int perpage = 10;  
  57.            listp[0].Value = "HW_HRXX";  
  58.            listp[1].Value = "JGBH,HJBH,LDXX,ZXBH,LDSJ,JTSJ,JTBZ,XYSC,CLBZ,ZXYY,CLSJ,THSC,JRFS,ZJSJ,GJSJ ";  
  59.            if (!string.IsNullOrEmpty(orderPX))  
  60.            {  
  61.                listp[2].Value = orderPX;  
  62.            }  
  63.            else  
  64.            {  
  65.                listp[2].Value = "HJBH DESC";  
  66.            }  
  67.             
  68.            listp[3].Value = strtj.ToString();  
  69.            listp[4].Value = perpage;  
  70.            listp[5].Value = CurrentPageIndex;  
  71.            listp[6].Direction = ParameterDirection.Output;  
  72.  
  73.            DataTable dt = DbHelperSQL.RunProcedure(strname, listp).Tables[0];  
  74.            totlepage = perpage;  
  75.            count = int.Parse(listp[6].Value.ToString());  
  76.  
  77.            return dt;  
  78.  
  79.        }  

페이지 나누기 방법
   
   
   
   
  1. /// <summary> 
  2.    ///   
  3.    /// summary> 
  4.    /// <param name="count"> param> 
  5.    /// <param name="Curpage"> param> 
  6.    /// <param name="pageSize"> param> 
  7.    /// <param name="url">urlparam> 
  8.    /// <param name="pagetag">pageparam> 
  9.    /// <returns>returns> 
  10.    public static string GetPageCode(int count, int Curpage, int pageSize, string url, string pagetag)  
  11.    {  
  12.        bool mark = false;  
  13.        if (pagetag == "")  
  14.            pagetag = "page";  
  15.        if (url.Contains("type"))  
  16.        {  
  17.            urlurl = url.Substring(0, url.LastIndexOf("type"));  
  18.        }  
  19.        if (url.Contains(pagetag))// page  
  20.        {  
  21.            mark = true;  
  22.        }  
  23.  
  24.        if (url.IndexOf('?') > 0)//  
  25.            urlurl = url + "&";  
  26.        else  
  27.            urlurl = url + "?";  
  28.        if (mark)// page  
  29.        {  
  30.            urlurl = url.Substring(0, url.LastIndexOf(pagetag));  
  31.        }  
  32.        int countPage = (count % pageSize) == 0 ? count / pageSize : count / pageSize + 1;  
  33.        int priPage = ((Curpage - 1)) > 0 ? (Curpage - 1) : 1;  
  34.        int lastPage = ((Curpage + 1)) < countPage ? (Curpage + 1) : countPage;  
  35.  
  36.  
  37.        string link = ";  
  38.        string code = link + " onClick=qq(1)> a> " + link + "onClick=qq(" + priPage.ToString() + ")> a> " + link + "onClick=qq(" + lastPage.ToString() + ")> a> " + link + "onClick=qq(" + countPage.ToString() + ")> a>       :" + Curpage.ToString() + "/" + countPage + "   " + count.ToString() + "  ";  
  39.  
  40.        code += "<select action='page' onchange=qq(this.value)>";  
  41.        for (int i = 1; i <= countPage; i++)  
  42.        {  
  43.            string selected = "";  
  44.            if (Curpage == i)  
  45.                selected = "selected='selected'";  
  46.            code += string.Format("<option value='{0}' {2}>{0}/{1}option>", i, countPage, selected);  
  47.        }  
  48.        code += "select>";  
  49.  
  50.        return code;  
  51.    } 

페이지 백그라운드 구현:
   
   
   
   
  1. DataTable dt = fwlog.Select(ldxx,zxbh,jtbz,clbz, kssj, jssj, page,orderPX,out count ,out totlepage);  
  2.            StringBuilder st = new StringBuilder();  
  3.            st.Append(" <table width='98%' align='center' border='1' align='center' cellpadding='3' cellspacing='0' style='border-collapse: collapse'  class='TableBorderStyle' >");  
  4.            st.Append("<tr class='TableTRBgStyle'>");  
  5.              
  6.            st.AppendFormat("<td  align='center' > td>");  
  7.            st.AppendFormat("<td  align='center' > td>");  
  8.            st.AppendFormat("<td  align='center' > td>");  
  9.            st.AppendFormat("<td  align='center' > td>");  
  10.            st.AppendFormat("<td  align='center' > td>");  
  11.            st.AppendFormat("<td  align='center' > td>");  
  12.            st.AppendFormat("<td  align='center' > td>");  
  13.            st.AppendFormat("<td  align='center' > td>");  
  14.  
  15.  
  16.            st.Append("tr>");  
  17.            for (int i = 0; i < dt.Rows.Count; i++)  
  18.            {  
  19.                
  20.                st.AppendFormat("<tr>");  
  21.                st.AppendFormat("<td width='40%' align='center' >{0}td>", dt.Rows[i]["HJBH"]);  
  22.                st.AppendFormat("<td width='40%' align='center' >{0}td>", dt.Rows[i]["LDXX"]);  
  23.                st.AppendFormat("<td width='40%' align='center' >{0}td>", dt.Rows[i]["LDSJ"]);  
  24.                st.AppendFormat("<td width='40%' align='center' >{0}td>", dt.Rows[i]["ZXBH"]);  
  25.                if (dt.Rows[i]["ZXBH"].ToString() == "")  
  26.                {  
  27.                    st.AppendFormat("<td width='10%' align='center' >{0}td>", dt.Rows[i]["ZXBH"]);  
  28.                }  
  29.                else  
  30.                {  
  31.                    st.AppendFormat("<td width='10%' align='center'>{0}td>", tool.GetCZYMCbyID(int.Parse(dt.Rows[i]["ZXBH"].ToString())));  
  32.                }  
  33.                st.AppendFormat("<td width='40%' align='center' >{0}td>", tool.GetDMName("CLBZ", dt.Rows[i]["CLBZ"].ToString()));  
  34.                if (dt.Rows[i]["CLBZ"].ToString() == "0" || dt.Rows[i]["CLBZ"].ToString() == "2")  
  35.                {  
  36.  
  37.                    st.AppendFormat("<td width='30%' align='center' ><img src='../../../p_w_picpaths/txt.gif' onclick='dd()' id='{0}'>td>", dt.Rows[i]["HJBH"]);  
  38.                }  
  39.                else  
  40.                {  
  41.                    st.AppendFormat("<td width='30%' align='center' ><img src='../../../p_w_picpaths/txt.gif' onclick='tt({0})' id='{0}'>td>", dt.Rows[i]["HJBH"]);  
  42.                }  
  43.                //st.AppendFormat("<td width='30%' align='center' ><img src='F:\\haiyan\\kfzx\\p_w_picpaths\\cc.ico' onclick='tt({0},{1})' id='{0}'>td>",dt.Rows[i]["HJBH"],dt.Rows[i]["CLBZ"]);  
  44.                st.AppendFormat("<td width='30%' align='center' ><img src='../../../p_w_picpaths/clbtn.gif'>td>");  
  45.                 
  46.                st.Append("tr>");  
  47.            }  
  48.            st.Append("<tr class='TableBottom'>");  
  49.            st.Append("  <td  colspan='8'><center>" + tool.GetPageCode(fwlog.Count(ldxx ,zxbh ,jtbz,clbz, kssj, jssj), page, 10, "", "") + "center>td>");  
  50.            st.Append("tr>");  
  51.            st.Append("table>");  
  52.            pagestr = st.ToString(); 

페이지 프론트 데스크톱에서 비동기 리셋:
   
   
   
   
  1. //========= =====================  
  2.  function qq(dat)  
  3.             {  
  4.                 q=dat;  
  5.                     $.get("ym_zxxt_ywsl_ldjl_selcet.aspx?z="+z,{cur:dat,LDXX:$("#LDXX").val()},function(data){  
  6.                     $("#select").html(data);  
  7.                     })  
  8.                     z++;  
  9.               }  

비교적 간단한 코드는 해설을 많이 하지 않아서 쉽게 알아볼 수 있어요.
 
 
 
 
 

좋은 웹페이지 즐겨찾기