存储过程--分页与C#代码调用

存储过程:

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:<Author,,QiangWang>

-- Create date: <Create Date,,>

-- Description:<Description,分页,>

-- =============================================

ALTER PROCEDURE OrderInfoPage

@startRecordIndex INT,      --分页页码

@pagesize int,              --分页行数

@strWhere varchar(500),     --查询条件

@strOrder varchar(200),     --排序条件

@OUTpageCount INT OUT       --输出记录条数

AS

BEGIN

DECLARE @SBegin int         --开始记录数

DECLARE @EEnd int           --结束记录数

DECLARE @strTmp NVARCHAR(1000) --当前条件下读取到的数据列

DECLARE @strSQL NVARCHAR(3000)

SET @SBegin=(@startRecordIndex-1)*@pagesize+1

SET @[email protected]*@startRecordIndex

BEGIN

SET @strTmp=‘SELECT @OUTpageCount=count(1) FROM OrderInfo oi  left join OrderDetail od on oi.OrderNum=od.OrderNum left join ProductInfo pi on

od.ProductID=pi.ID  left join Store s on pi.StoreID=s.ID left join RandomCode rc on pi.FromID=rc.Random left join UserInfo ui

on oi.UserID=ui.ID left join UserAddress ua on oi.AddressID=ua.ID  ‘[email protected]

exec sp_executesql @strTmp,N‘@OUTpageCount int out‘,@OUTpageCount OUT

END

BEGIN

--with as 子查询部分

--ROW_NUMBER() OVER 生成一个有顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER BY ID)

--还必须添加OVER语句以便告诉SQL Server你希望怎样添加行序号。

set @strSQL=‘with temptbl as (SELECT ROW_NUMBER() OVER (ORDER BY ‘[email protected]+‘)AS Row, oi.ID as oiID,oi.Title, oi.AddTime,oi.Address,oi.CourierNumber,oi.GoodsTime,oi.IsPrint2,oi.OrderNum,oi.PayTime,oi.PayType,oi.PricePay,oi.PriceMust

,oi.SecurityCode,oi.SendType,oi.Status,oi.SoureType,oi.UserID,od.BarCode,od.ProductID,od.ProductName,od.Count,s.StoreName,pi.Brand,ui.WeiXinName,

ua.ConsigneeName,ua.ConsigneeMobile  from OrderInfo oi  left join OrderDetail od on oi.OrderNum=od.OrderNum left join ProductInfo pi on

od.ProductID=pi.ID  left join Store s on pi.StoreID=s.ID left join UserInfo ui

on oi.UserID=ui.ID left join UserAddress ua on oi.AddressID=ua.ID ‘[email protected]+‘)‘

set @strSQL+=‘SELECT * FROM temptbl where Row between ‘+STR(@SBegin)+‘ and ‘+STR(@EEnd)

exec sp_executesql @strSQL,N‘@startRecordIndex int,@strWhere varchar(500), @strOrder varchar(200)‘,@startRecordIndex ,@strWhere,@strOrder

END

END

GO

C#代码调用:

DataTable dt = Common.DbHelperSQL.ExecStoreProcedureForGettingTable(dir, "OrderInfoPage");//执行存储过程

int total = Common.DbHelperSQL.ExecStoreProcedureForGettingResult(dir, "OrderInfoPage");//总记录

/// <summary>

/// 封装执行存储过程

/// </summary>

/// <param name="parametersInstance">存储过程参数</param>

/// <param name="storedProcedureName">存储过程名称</param>

/// <returns></returns>

public static System.Data.DataTable ExecStoreProcedureForGettingTable(System.Collections.Generic.Dictionary<string, object> parametersInstance, string storedProcedureName)

{

using (SqlConnection con = new SqlConnection(connectionString))

{

try

{

//设置Sql

SqlCommand cmd = new SqlCommand(storedProcedureName, con);

cmd.CommandType = CommandType.StoredProcedure;

cmd.CommandTimeout = 999;

if (parametersInstance != null)

{

foreach (KeyValuePair<string, object> item in parametersInstance)

{

SqlParameter parm = new SqlParameter(item.Key, item.Value);

cmd.Parameters.Add(parm);

}

}

DataTable dt = new DataTable(Guid.NewGuid().ToString());

SqlDataAdapter sdap = new SqlDataAdapter(cmd);

sdap.Fill(dt);

return dt;

}

catch (Exception er)

{

throw er;

}

}

}

/// <summary>

/// 返回受影响行数

/// </summary>

/// <param name="parametersInstance">存储过程参数</param>

/// <param name="storedProcedureName">存储过程名称</param>

/// <returns></returns>

public static int ExecStoreProcedureForGettingResult(System.Collections.Generic.Dictionary<string, object> parametersInstance, string storedProcedureName)

{

using (SqlConnection con = new SqlConnection(connectionString))

{

try

{

//设置Sql

SqlCommand cmd = new SqlCommand(storedProcedureName, con);

cmd.CommandType = CommandType.StoredProcedure;

cmd.CommandTimeout = 999;

if (parametersInstance != null)

{

foreach (KeyValuePair<string, object> item in parametersInstance)

{

SqlParameter parm = new SqlParameter(item.Key, item.Value);

cmd.Parameters.Add(parm);

}

cmd.Parameters["@OUTpageCount"].Direction = ParameterDirection.Output;

}

DataTable dt = new DataTable(Guid.NewGuid().ToString());

con.Open();

cmd.ExecuteNonQuery();

int num = (int)cmd.Parameters["@OUTpageCount"].Value;

con.Close();

return num;

}

catch (Exception er)

{

throw er;

}

}

}


时间: 2024-11-14 01:39:46

存储过程--分页与C#代码调用的相关文章

asp.net利用存储过程分页代码

-最通用的分页存储过程 -- 获取指定页的数据 CREATE PROCEDURE Pagination @tblName varchar(255), -- 表名 @strGetFields varchar(1000) = '*', -- 需要返回的列 @fldName varchar(255)='', -- 排序的字段名 @PageSize int = 10, -- 页尺寸 @PageIndex int = 1, -- 页码 @doCount bit = 0, -- 返回记录总数, 非 0 值则

大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 按 Ctrl+C 复制代码1create database data_Test --创建数据库data_Test 2GO 3use data

存储过程具体过程以及sql数据库调用和程序代码调用

1.存储过程,无参数的存储过程 创建无参数存储存储过程 Create Procedure DCEMREMR_TEMPLATEAs SELECT TOP 10 [FILENAME],[FILETITLE],[FILECONTENT] from [DCEMR].[dbo].[EMR_TEMPLATE]; 调用无参数存储存储过程 sql 数据库中的额调用  exec DCEMREMR_TEMPLATE: sql程序代码调用 //无参数存储过程 string connecting = "Data Sou

大数据量分页存储过程效率测试附代码(转http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html)

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 1create database data_Test  --创建数据库data_Test  2GO  3use data_Test  4GO

java代码调用数据库存储过程

由于前边有写java代码调用数据库,感觉应该把java调用存储过程也写一下,所以笔者补充该篇! package testSpring; import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet; import oracle.jdbc.OracleCalla

我也谈谈 代码调用存储过程超时,SQL Server Management Studio里运行很快的问题

最近遇到了一个问题就是 一个执行速度很快的存储过程,在代码中调用的时候却超时了. 后来看到了两篇文章: 其中一篇是这样介绍的 今天同事用代码调用存储过程时超时,在SQL Server Management Studio里运行却很快就有结果,这和我上次遇到的情况一下,现在将解决方案记录如下,谨为大家作一提醒. 解决方案就是: 把存储过程中多余的空格删掉. 瞠目吧结舌吧,不过这就是现实,现实是残酷的,现实是无情的,哈哈 不一定是哪个空格就引起了超时,试着看吧  上面的解决方案是将存储过程里的空格去掉

基于Entity FrameWork实现存储过程分页并返回总数

很多项目都会用到分页这个功能.网上也有很多这方面的资料,包括存储过程也是.但是基于EF来存储过程并返回总条数或者总页数的资料就没那么齐全了,至少我找了很久也没有找到.没有办法,项目有需求,那就自己一点点研究咯.好在皇天不负有心人,总算是弄出来了.这里写出来,方便你我他. 先上存储过程的代码: ALTER PROC [dbo].[Common_PageList](@tab nvarchar(max),---表名@strFld nvarchar(max), --字段字符串@strWhere varc

NET分页实现及代码

最近在写一个关于NET的框架,写到后面果不其然的就遇到了分页,自己看了很多关于分页的并自己结合写了一个,晒出来和大家分享一下,第一次写博客望大家多多提意见啦... cs文件分页代码: 1 Paging p = new Paging(3, sql语句); //每页3条 2 ViewState["List"] = p.GetDataTable(); //查询出要显示的DataTable 3 ViewState["page"] = p.GetPageing(this);

EntityFramework 4使用存储过程分页

1 CREATE PROC usp_OrgPage_SQL 2 @pageIndex INT, 3 @pageSize INT, 4 @totalCount INT OUTPUT 5 AS 6 BEGIN 7 SET @totalCount = (SELECT COUNT(*) FROM dbo.Organization) 8 SELECT * FROM 9 ( 10 SELECT *,ROW_NUMBER() OVER(ORDER BY OrganizationID DESC)AS row F