• 完整的分页存储过程以及c#调用方法


    高效分页存储过程

    USE [db]
    GO
    /****** 对象:  StoredProcedure [dbo].[p_Page2005]    脚本日期: 06/17/2010 11:24:21 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -----------------------------------------------------
    create PROCEDURE [p_Page]
        @tblName   varchar(255),                -- TableName
        @strGetFields varchar(1000) = '*',        -- Select field 
        @fldName varchar(255)='',                -- Primary field name
        @PageSize   int = 10,                    -- Page size
        @PageIndex  int = 1,                    -- Page index
        @OrderType bit = 0,                        -- SortType, not 0 is DESC
        @strWhere  varchar(1500) = '',            -- QueryCodition (Note: Don't include where)
        @total int =0 out
    AS
    begin
      set nocount on
    
    declare @strSQL   nvarchar(4000)      -- main sql
    declare @strTmp   varchar(110)        -- temp variable
    declare @strOrder varchar(400)        -- sorttype
     
    ----记录数
    set @strSQL = 'select @total=count(*) from [' + @tblName + '] where 1=1' + @strWhere;
    --print @strSQL
    exec sp_executesql @strSQL,N'@total int output',@total output;     
    --print @total;
    
    ----记录集
    if (@OrderType != 0)
      begin
           set @strTmp = '<(select min'
           set @strOrder = ' order by [' + @fldName +'] desc'
      end
    else
      begin
           set @strTmp = '>(select max'
           set @strOrder = ' order by [' + @fldName +'] asc'
      end
         
    if @PageIndex = 1
        begin
           set @strSQL = 'select top ' + rtrim(ltrim(str(@PageSize))) +' '+@strGetFields+ ' from [' + @tblName + '] where 1=1' + @strWhere + ' ' + @strOrder
        end
    else
        begin
            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 1=1' + @strWhere + ' '
                    + @strOrder + ') as tblTmp) and 1=1' + @strWhere + ' ' + @strOrder
        end 
    
    --print @strSQL
    exec (@strSQL)
    set nocount off
    end
    
    --exec p_Page2005 't_alarm_data','*','id',10,5,0,''

    c#调用方法

    public static DataSet GetRecordByPage(string tblName, int PageSize, int PageIndex, string strWhere, out int count)
            {
                return GetRecordByPage(tblName, "*", "ID", PageSize, PageIndex, strWhere, out count);
            }
    
            public static DataSet GetRecordByPage(string tblName, string strGetFields, string fldName, int PageSize, int PageIndex,string strWhere, out int count)
            {
                DataSet ds = new DataSet();
                try
                {
                    using (SqlConnection conn = new SqlConnection(SQLHelper.CONN_STRING_SQL))
                    {
                        SqlCommand cmd = new SqlCommand();
                        cmd.Connection = conn;
                        SetParams(cmd);
    
                        cmd.Parameters[0].Value = tblName;
                        cmd.Parameters[1].Value = strGetFields;
                        cmd.Parameters[2].Value = fldName;
                        cmd.Parameters[3].Value = PageSize;
                        cmd.Parameters[4].Value = PageIndex;
                        cmd.Parameters[5].Value = 0;
                        cmd.Parameters[6].Value = strWhere;
    
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = "p_Page";
                        cmd.CommandTimeout = 180;
    
                        SqlDataAdapter adapter = new SqlDataAdapter();
                        adapter.SelectCommand = cmd;
                       
                        DataSet source = new DataSet();
                        adapter.Fill(ds);
                        //ds.Tables.RemoveAt(0);
    
                        object o = cmd.Parameters["@total"].Value;
                        count = (o==null || o== DBNull.Value)?0: System.Convert.ToInt32(o);
                    }
                }
                catch (SqlException e)
                {
                    throw e;
                }
                return ds;
            }
    
            private static void SetParams(SqlCommand cmd)
            {
                cmd.Parameters.Add(new SqlParameter("@tblName", SqlDbType.VarChar, 255));
                cmd.Parameters.Add(new SqlParameter("@strGetFields", SqlDbType.VarChar, 1000));
                cmd.Parameters.Add(new SqlParameter("@fldName", SqlDbType.VarChar, 255));
                cmd.Parameters.Add(new SqlParameter("@PageSize", SqlDbType.Int));
                cmd.Parameters.Add(new SqlParameter("@PageIndex", SqlDbType.Int));
                cmd.Parameters.Add(new SqlParameter("@OrderType", SqlDbType.Bit));
                cmd.Parameters.Add(new SqlParameter("@strWhere", SqlDbType.VarChar,1500));
    
                SqlParameter param = new SqlParameter("@total", SqlDbType.Int);
                param.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(param);
            }
            #endregion
  • 相关阅读:
    应用程序池溢出问题
    弹窗上传图片
    第三方监测
    服务器架设方案
    python随笔录入月份的值,输出对应的季节
    用python计算直角三角形斜边长
    返回(统计)一个列表中出现次数最多的元素
    使用random函数实现randint函数的功能
    Spring
    ng build prod basehref /javaweb/angular/
  • 原文地址:https://www.cnblogs.com/qingqingqing/p/4460415.html
Copyright © 2020-2023  润新知