您的位置:首页 > 编程语言 > C#

c#调用多个可选条件查询的分页存储过程

2009-07-22 15:07 639 查看
一代码:

public DataSet GetAllProduct(string productNameCode,byte productType,byte productState,

short organizationID, int size, int index, ref int? count)

{

//组装每件语句

StringBuilder sbCondition = new StringBuilder();

sbCondition.Append(" WHERE 1=1 ");

if (!string.Empty.Equals(productNameCode))

{

productNameCode = productNameCode.Replace("'", "''");

sbCondition.Append(" and ((AllProduct.ProductCode like '%" + productNameCode + "%') or ");

sbCondition.Append(" (AllProduct.ProductName like '%" + productNameCode + "%'))");

}

if (productType != 0)

{

sbCondition.Append(" and AllProduct.ProductCategory = ");

sbCondition.Append(productType);

}

if (productState != 0)

{

sbCondition.Append(" and AllProduct.ProductStatus = ");

sbCondition.Append(productState);

}

if (organizationID != -1)

{

sbCondition.Append(" and AllProduct.BelongTo = ");

sbCondition.Append(organizationID);

}

SqlParameter[] paras = new SqlParameter[4];

paras[0] = new SqlParameter("@strCondition", sbCondition.ToString());

paras[1] = new SqlParameter("@Size", size);

paras[2] = new SqlParameter("@index", index - 1);

paras[3] = new SqlParameter("@count", count);

paras[3].Direction = ParameterDirection.Output;

DataSet result = SqlHelper.ExecuteDataset(conSisManage, CommandType.StoredProcedure, "Proc_GetAllProduct", paras);

if (paras[3].Value != DBNull.Value)

{

count = (int)paras[3].Value;

}

return result;

}

二数据库:

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go

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

-- Author: Ylem

-- Create date: 2009-07-20

-- Create date: 2009-07-24

-- Description: 得到基本产品,附加产品,特殊产品组合列表

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

ALTER PROCEDURE [dbo].[Proc_GetAllProduct]

@strCondition varchar(2000), --查询条件

@Size int,

@index varchar(10),

@count int out

AS

BEGIN

print @strCondition

Create Table #TempRecord (IndexID int /*IDENTITY (1, 1) NOT NULL primary key*/,

ProductID uniqueidentifier,

ProductCode varchar(20),

ProductName nvarchar(64),

ProductStatus smallint,

BelongTo smallint,

ProductCategory smallint,

CreateOn datetime

)

insert into #TempRecord exec(' SELECT IndexID = ROW_NUMBER() OVER(ORDER BY AllProduct.CreateOn desc), * from

(SELECT p.ProductID, p.ProductCode, p.ProductName,p.ProductStatus,p.BelongTo, 1 ProductCategory,p.CreatedDate as CreateOn

FROM Product p --基本产品

UNION ALL

SELECT p.ID ProductID, p.Code ProductCode, p.Name ProductName,-1 ProductStatus,-1 BelongTo, 2 ProductCategory,''1900-1-1'' CreateOn

FROM AttachedProduct p --附加产品

UNION ALL

SELECT p.ID ProductID, p.ProductCode, p.ProductName,-1 ProductStatus,-1 BelongTo, 3 ProductCategory,''1900-1-1'' CreateOn

FROM SpecialProduct p --特殊产品

) as AllProduct

' + @strCondition --+' order by AllProduct.CreateOn desc'

)

--返回统计数

select @count = max(IndexID) from #TempRecord

--返回数据

select * from #TempRecord tmp where IndexID > (@index*@Size) and IndexID<=((@index + 1) * @Size)

drop table #TempRecord

END

/*

declare @strCondition varchar(2000)

declare @count int

set @strCondition=' WHERE 1=1 --and ProductCategory=1-- and AllProduct.ProductStatus = 1 and AllProduct.BelongTo=1'

exec [Proc_GetAllProduct] @strCondition,25,0,@count output

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: