• sqlserver 分页


    SQL语句:

    create PROCEDURE [dbo].[GetPageDataOutRowNumber] ( @tn nvarchar(
    30),--表名称 @idn nvarchar(20),--表主键名称 @pi int = 1,--当前页数 @ps int = 7,--每页大小 @wh nvarchar(255) = '',--wehre查询条件 @oby nvarchar(255) = '',--orderby 排序 @rc int output,--总行数(传出参数) @pc int output--总页数(传出参数) ) AS DECLARE @sql NVARCHAR(225)='',@sqlCount NVARCHAR(225)='' --1.计算总行数和总页数 SET @sqlCount = 'SELECT @rc=COUNT(['+@idn+']),@pc=CEILING((COUNT('+@idn+')+0.0)/'+ CAST(@ps AS VARCHAR)+') FROM ' + @tn IF LEN(@wh)>1 set @sqlCount=@sqlCount+' WHERE '+@wh print @sqlCount EXEC SP_EXECUTESQL @sqlCount,N'@rc INT OUTPUT,@pc INT OUTPUT',@rc OUTPUT,@pc OUTPUT --2.分页 --2.1如果是第一页,则直接查询 IF @pi = 1 BEGIN SET @sql='SELECT TOP '+str(@ps) +' * FROM '+@tn IF LEN(@wh)>1 set @sql=@sql+' WHERE '+@wh IF LEN(@oby)>1 SET @sql=@sql+' order by ' +@oby EXEC(@sql) END ELSE--2.2如果不是第一页,则拼接查询语句 BEGIN SET NOCOUNT ON SET @sql='SELECT * FROM (select row_number() over(order by ' IF LEN(@oby)>1 set @sql=@sql + @oby+') as rowNum,* from '+@tn else set @sql=@sql + @idn+') as rowNum,* from '+@tn IF LEN(@wh)>1 set @sql=@sql+' where '+@wh set @sql=@sql+')as temp where rowNum>'+str(@ps * (@pi-1))+' and rowNum<='+str(@ps*@pi) print @sql EXEC(@sql) SET NOCOUNT OFF END
     
    --测试语句
    declare @rc int,@pc int
    exec [GetPageDataOutRowNumber] 'Ams_Area','ar_id',2,5,'',' ar_id desc',@rc output,@pc output
    select @rc,@pc
     
    --C#调用
     
      private void getdataByfenye(HttpContext context)
            {
                int pageSize = int.Parse(context.Request["rows"].ToString());
                int page = int.Parse(context.Request["page"].ToString());
    
                string strCon = @"Server=192.168.10.237;database=KM;uid=sa;pwd=Password01!;";
                SqlConnection con = new SqlConnection(strCon);
                SqlCommand com = new SqlCommand("GetPageDataOutRowNumber", con);
                com.CommandType = CommandType.StoredProcedure;
                com.Parameters.Add(new SqlParameter("@tn", "T_KNOWLEDGE_EXPERT"));
                com.Parameters.Add(new SqlParameter("@idn", "OID"));
                com.Parameters.Add(new SqlParameter("@pi", page));
                com.Parameters.Add(new SqlParameter("@ps", pageSize));
                string strWhere = "";
                string strOby = "";
                string strExpert = context.Request["expert"] == null ? "" : context.Request["expert"].ToString();
                string strDeptno = context.Request["deptno"] == null ? "" : context.Request["deptno"].ToString();
                if (!string.IsNullOrEmpty(strExpert))
                {
                    strWhere += " EXPERT = '" + strExpert + "' and ";
                }
                if (!string.IsNullOrEmpty(strDeptno))
                {
                    strWhere += " DEPARTMENT like '%" + strDeptno + "%' and ";
                }
                if (!string.IsNullOrEmpty(strWhere))
                {
                    strWhere = strWhere.Substring(0, strWhere.LastIndexOf("and"));
                }
                com.Parameters.Add(new SqlParameter("@wh", strWhere));
                com.Parameters.Add(new SqlParameter("@oby", strOby));
    
                SqlParameter param = new SqlParameter("@rc", SqlDbType.Int);
                param.Direction = ParameterDirection.Output;
                com.Parameters.Add(param);
                SqlParameter param1 = new SqlParameter("@pc", SqlDbType.Int);
                param1.Direction = ParameterDirection.Output;
                com.Parameters.Add(param1);
                com.CommandTimeout = 180;
                SqlDataAdapter sda = new SqlDataAdapter();
                sda.SelectCommand = com;
    
                con.Open();
                DataSet ds = new DataSet();
                sda.Fill(ds);
                con.Close();
                object o = com.Parameters["@rc"].Value;
                int total = (o == null || o == DBNull.Value) ? 0 : Convert.ToInt32(o);
    
                object b = com.Parameters["@pc"].Value;
                int pageCount = (b == null || o == DBNull.Value) ? 0 : Convert.ToInt32(b);
    
    
                List<KnowledgeExpert> lst = new List<KnowledgeExpert>();
                KnowledgeExpert ke = new KnowledgeExpert();
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    ke = new KnowledgeExpert();
                    ke.CREATED_BY = dr["CREATED_BY"] == null ? "" : dr["CREATED_BY"].ToString();
                    ke.CREATED_TIME = dr["CREATED_TIME"] == null ? "" : dr["CREATED_TIME"].ToString();
                    ke.DEPARTMENT = dr["DEPARTMENT"] == null ? "" : dr["DEPARTMENT"].ToString();
                    ke.DESCRIPTION = dr["DESCRIPTION"] == null ? "" : dr["DESCRIPTION"].ToString();
                    ke.EXPERT = dr["EXPERT"] == null ? "" : dr["EXPERT"].ToString();
                    ke.OID = dr["OID"].ToString();
                    lst.Add(ke);
                }
                JavaScriptSerializer jss = new JavaScriptSerializer();
                String str = jss.Serialize(lst);
                String str2 = "{"total":" + total + ","rows":" + str + "}";
                //Thread.Sleep(3000);
                context.Response.Write(str2);
            }
  • 相关阅读:
    TCP/IP和HTTP的举例理解
    c#中栈和堆的理解
    c#设计模式之单例模式
    JSON.stringify实例应用—将对象转换成JSON类型进行AJAX异步传值
    JSON.stringify初识
    c# 过滤字符串中的重复字符
    C#中jQuery Ajax实例(二)
    C#中jQuery Ajax实例(一)
    jQuery动态对表格Table进行添加或删除行以及修改列值操作
    asp.net中控件的Attributes用法
  • 原文地址:https://www.cnblogs.com/ChineseMoonGod/p/4663712.html
Copyright © 2020-2023  润新知