完整的分页存储过程以及c#调用方法
高效分页存储过程
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#调用方法的更多相关文章
- 完整SQL分页存储过程(支持多表联接)
http://www.cnblogs.com/andiki/archive/2009/03/24/1420289.html Code/********************************* ...
- Delphi调用SQL分页存储过程实例
Delphi调用SQL分页存储过程实例 (-- ::)转载▼ 标签: it 分类: Delphi相关 //-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存 ...
- SQL2005分页存储过程(支持多表联接)
Code /********************************************************* * 作 用:数据分页(完整SQL分页存储过程(支持多表联接)) ...
- mvc,EntityFramework调用分页存储过程
此文讲述mvc4+entityframework6+sqlserver2008环境下调用存储过程,实现分页. 1.分页存储过程代码如下: 分页原理用的row_number()和over()函数实现(没 ...
- MySql 存储过程及调用方法
存储过程实例: DELIMITER $$drop procedure if exists ff $$CREATE /*[DEFINER = { user | CURRENT_USER }]*/ PRO ...
- Oracle数据库中调用Java类开发存储过程、函数的方法
Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日 浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...
- php分页类的二种调用方法(转载)
php分页类的二种调用方法 原文地址:http://www.xfcodes.com/php/fenye/25584.htm 导读:php分页类的二种调用用法,ajax调用php分页类,非ajax方式调 ...
- Java对存储过程的调用方法
本文将介绍Java怎样实现对存数过程的调用方法,作者用了几个样例进行了具体的说明,简单明了,很适合刚開始学习的人. 一.Java怎样实现对存储过程的调用: A:不带输出參数的 create proce ...
- Oracle分页存储过程及PLSQL中的调用脚本
撰写过程:网上搜集测试了好多的Oracle分页存储过程代码,经整理后终于通过测试,特分享给大家 测试步骤:1.运行创建包命令;2.运行创建存储过程命令;3.运行调用分页存储过程语句 测试环境:wind ...
随机推荐
- 补PSP进度(10.28-11.3)
本周PSP进度 10月31号 内容 开始时间 结束时间 打断时间 净时间 看蛋白质相互作用论文 8:40 10:35 约12m 103m 分析约跑功能 13:20 13:55 0 35m 练习VSL2 ...
- occ代码分析
临时变量就是local里面的变量擦除变量就是把模型改成擦除标记 void SelectMgr_SelectionManager::LoadMode (const Handle(SelectMgr_Se ...
- Mongodb 副本集分片(一)---初始化mongodb安装启动
写在前面:mongodb是nosql非关系型数据库中,比较受欢迎的产品.在数据持久化及与关系型数据库的关联上也做的比较好,目前各大公司在存放二进制文件(图片.视频等)中应用也比较广泛.其遵循的key- ...
- rtc关机闹钟2 Alarm manager
public void set(int type, long triggerAtMillis, long windowMillis, long intervalMillis, PendingInten ...
- javascript无线端的判断
经常在工作中要求网页做这样的处理判断:针对无线端的网页,我们需要兼容一种异于PC端的网页效果. 如下代码就可以实现无线端的判断: var mobs = ['android', 'ipad', 'ipo ...
- C# Bitmap 复制
以后再详述,先上代码. public bool CopyBitmap(Bitmap source, Bitmap destination) { if ((source.Width != destina ...
- lock
#ifndef lock_h #define lock_h #include <stdint.h> #include <string.h> #include "myd ...
- 如何用python搞定验证码中的噪点
背景:朋友在为"关山口男子职业技术学校"写一款校园应用,于是找MoonXue写一个学生选课系统的登录接口.为了搞定这个接口,不得不先搞定这个系统的验证码. 验证码大概是这个样子 看 ...
- php发送邮件
<?php header("content-Type: text/html; charset=utf-8"); require("class.phpmailer.p ...
- Nginx中的进程亲和性 affinity
Nginx采用多进程Master/Worker结构,Worker进程数为CPU个数时工作效率最高,Nginx通过affinity为每个Worker进程绑定一个CPU,避免进程切换带来的消耗,同时能够保 ...