高效分页存储过程

USE [db]
GO
/****** 对象: StoredProcedure [dbo].[p_Page2005] 脚本日期: // :: ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-----------------------------------------------------
create PROCEDURE [p_Page]
@tblName varchar(), -- TableName
@strGetFields varchar() = '*', -- Select field
@fldName varchar()='', -- Primary field name
@PageSize int = , -- Page size
@PageIndex int = , -- Page index
@OrderType bit = , -- SortType, not is DESC
@strWhere varchar() = '', -- QueryCodition (Note: Don't include where)
@total int = out
AS
begin
set nocount on declare @strSQL nvarchar() -- main sql
declare @strTmp varchar() -- temp variable
declare @strOrder varchar() -- 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 != )
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 =
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[].Value = tblName;
cmd.Parameters[].Value = strGetFields;
cmd.Parameters[].Value = fldName;
cmd.Parameters[].Value = PageSize;
cmd.Parameters[].Value = PageIndex;
cmd.Parameters[].Value = ;
cmd.Parameters[].Value = strWhere; cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "p_Page";
cmd.CommandTimeout = ; 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)?: 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, ));
cmd.Parameters.Add(new SqlParameter("@strGetFields", SqlDbType.VarChar, ));
cmd.Parameters.Add(new SqlParameter("@fldName", SqlDbType.VarChar, ));
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,)); SqlParameter param = new SqlParameter("@total", SqlDbType.Int);
param.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param);
}
#endregion

完整的分页存储过程以及c#调用方法的更多相关文章

  1. 完整SQL分页存储过程(支持多表联接)

    http://www.cnblogs.com/andiki/archive/2009/03/24/1420289.html Code/********************************* ...

  2. Delphi调用SQL分页存储过程实例

    Delphi调用SQL分页存储过程实例 (-- ::)转载▼ 标签: it 分类: Delphi相关 //-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存 ...

  3. SQL2005分页存储过程(支持多表联接)

    Code /*********************************************************   * 作    用:数据分页(完整SQL分页存储过程(支持多表联接)) ...

  4. mvc,EntityFramework调用分页存储过程

    此文讲述mvc4+entityframework6+sqlserver2008环境下调用存储过程,实现分页. 1.分页存储过程代码如下: 分页原理用的row_number()和over()函数实现(没 ...

  5. MySql 存储过程及调用方法

    存储过程实例: DELIMITER $$drop procedure if exists ff $$CREATE /*[DEFINER = { user | CURRENT_USER }]*/ PRO ...

  6. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...

  7. php分页类的二种调用方法(转载)

    php分页类的二种调用方法 原文地址:http://www.xfcodes.com/php/fenye/25584.htm 导读:php分页类的二种调用用法,ajax调用php分页类,非ajax方式调 ...

  8. Java对存储过程的调用方法

    本文将介绍Java怎样实现对存数过程的调用方法,作者用了几个样例进行了具体的说明,简单明了,很适合刚開始学习的人. 一.Java怎样实现对存储过程的调用: A:不带输出參数的 create proce ...

  9. Oracle分页存储过程及PLSQL中的调用脚本

    撰写过程:网上搜集测试了好多的Oracle分页存储过程代码,经整理后终于通过测试,特分享给大家 测试步骤:1.运行创建包命令;2.运行创建存储过程命令;3.运行调用分页存储过程语句 测试环境:wind ...

随机推荐

  1. Eclipse Building Workspace 解决办法

    Eclipse 一直不停 building workspace... android开发论坛 juapk 完美解决总结 一.产生这个问题的原因多种 1.自动升级 2.未正确关闭  3.maven下载l ...

  2. Reconstruction

    /* Reconstruction */    /*@mixin border($position){      @if $position == left-right or $position == ...

  3. 日常积累之JSON.stringify和JSON.parse substr

    1.substr(start,len) 从字符串中读取内容,第一个参数是读取的首位置,如果为负数,则从末尾倒数计数. 第二个参数是要读取的长度. eg: var str = "silence ...

  4. 手机版web相关meta配置

    若页面需默认用ie兼容内核,增加标签: 若页面需默认用ie标准内核,增加标签: --> 页面标题

  5. Python’s SQLAlchemy vs Other ORMs[转发 7] 比较结论

    Comparison Between Python ORMs For each Python ORM presented in this article, we are going to list t ...

  6. 即时聊天IM之二 openfire 整合现有系统用户

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:egojit@qq.com  综述: ...

  7. android-studio-bundle-141.1980579-windows download Site

    https://dl.google.com/dl/android/studio/install/1.2.2.0/android-studio-bundle-141.1980579-windows.ex ...

  8. Java List合并去重

    List A和B A.removeAll(B); A.addAll(B); 例如有如下实体类: /** * hashset是如何保持元素的唯一性呢? * 是通过元素的hashcode和equals来表 ...

  9. ElasticSearch部署安装

    测试版本:elasticsearch-5.1.1 1.Windows环境下安装(win10系统) 1)解压elasticsearch-5.1.1.zip. 2)执行elasticsearch.bat启 ...

  10. kettle 使用JAVA代码进行执行

    kettle 设计完成之后,可以在设计工具中进行调用,也可以使用java代码进行调用.   1.通过文件方式执行转换.   public static void runTransfer(String[ ...