高效分页存储过程

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. 什么是UART中的FIFO

    FIFO是先进先出缓冲区的意思,即串口接收到的数据可以先进入FIFO,不必马上进入中断服务程序接收,这样可以节省CPU时间.对于发送数据也一样可以把要发送的数据一起写入FIFO,串口控制器按照写入的顺 ...

  2. Ajax些成绩批量录入

    1.jsp,ajax的循环调用,必须要递归,否则会出错. <%@ page language="java" import="java.util.*" pa ...

  3. org.springframework.jdbc.UncategorizedSQLException异常

    用到了mysql的TRUNCATE函数,这个关键字对spring事务有影响,最后换成了ROUND函数

  4. javascript进阶系列专题:作用域与作用域链

    字面意思,作用域是指变量和函数的作用范围,换言之,作用域决定了变量和函数的可见性和有效时间.javascript作用域是用函数来区分,与其他语言的大括号不同. for (var i=0; i<5 ...

  5. H:Highways

    总时间限制: 1000ms 内存限制: 65536kB描述The island nation of Flatopia is perfectly flat. Unfortunately, Flatopi ...

  6. java selenium (九) 常见web UI 元素操作 及API使用

    本篇介绍我们如何利用selenium 来操作各种页面元素 阅读目录  链接(link) <div> <p>链接 link</p> <a href=" ...

  7. js localStorage 设置和取值

    定义 Storage 对象,对象有get(取值), set(设置), add(加入新值)三个方法 const Storage = {} Storage.get = function (name) { ...

  8. Socket通信 简单实现私聊、群聊(dos命令下)

    很久以前的一个Demo,这里服务器只做转发功能,根据ID地址和端口号来标识身份,群聊和私聊只是简单实现, 服务器代码如下: import java.util.*; import java.io.*; ...

  9. STEP模块——电子琴

    电子琴原理 什么是声音?上过初中的朋友都知道声音是由震动所产生的.一定频率的震动就产生了一定频率的声音. 理论研究第一步,让喇叭发出do re mi fa sol la si的音,我们先不管do的频率 ...

  10. Android中什么时候使用get和post 以及他们的优缺点!!

    1. get是从服务器上获取数据,post是向服务器传送数据.2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过H ...