现在的位置: 首页 > 综合 > 正文

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

2013年01月21日 ⁄ 综合 ⁄ 共 3868字 ⁄ 字号 评论关闭

一代码:

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

*/

抱歉!评论已关闭.