第一、首先在sqlserver中创建一个存储过程
USE [BZY]
GO
/*
***** 对象: StoredProcedure [dbo].[up_ProcCustomPage2005_New] 脚本日期: 12/24/2013 11:17:03 *****
*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[up_ProcCustomPage2005_New]
@SelectSql varchar(
4000
)
,@OrderBy varchar(
4000
)
,@PageSize
int
,@PageIndex
int
,@PageCount
int
output
,@RecordCount
int
output
AS
--SET @SelectSql =
'
select * from table_3
'
--SET @OrderBy =
'
order by id desc
'
Declare @sql nvarchar(
4000
)
SET @sql
=
'
select @RecourdCount = count(*) from (
'
+ @SelectSql +
'
) as tt@#$
'
EXEC sp_executesql @sql,N
'
@RecourdCount int OUTPUT
'
,@RecordCount OUTPUT
SET @PageCount
= CEILING( (@RecordCount +
0.0
) /
@PageSize)
IF @PageIndex
>
@PageCount
SET @PageIndex
=
@PageCount
IF @PageIndex
<
1
SET @PageIndex
=
1
DECLARE @StartIndex
int
DECLARE @EndIndex
int
SET @StartIndex
= (@PageIndex-
1
) * @PageSize +
1
SET @EndIndex
= @PageIndex *
@PageSize
SET @sql
=
'
select * from (select row_number()over(
'
+ @OrderBy +
'
) as rownumber,* from (
'
+ @SelectSql +
'
) AS tt@#$) as tt@#$result where rownumber between
'
+ cast(@StartIndex AS varchar) +
'
and
'
+
cast(@EndIndex AS varchar)
PRINT @sql
EXEC sp_executesql @sql
二、c#代码:
private
static
DataTable GetExecuteCustomPage_New(
string
selectSql,
string
orderBy,
int
pageSize,
int
pageIndex,
out
int
pageCount,
out
int
recordCount)
{
MatchCollection mc
= Regex.Matches(orderBy,
@"
([^ ]*)\.[^ ]*
"
);
if
(mc.Count >
0
)
{
foreach
(Match item
in
mc)
{
orderBy
= orderBy.Replace(item.Groups[
1
].Value +
"
.
"
,
""
);
}
}
SqlParameter SelectSql
=
new
SqlParameter() { ParameterName =
"
@SelectSql
"
, Size =
4000
, Value =
selectSql };
SqlParameter OrderBy
=
new
SqlParameter() { ParameterName =
"
@OrderBy
"
, Size =
4000
, Value =
orderBy };
SqlParameter PageSize
=
new
SqlParameter() { ParameterName =
"
@PageSize
"
, Size =
4
, Value = pageSize , DbType =
DbType.Int32 };
SqlParameter PageIndex
=
new
SqlParameter() { ParameterName =
"
@PageIndex
"
, Size =
4
, Value = pageIndex , DbType =
DbType.Int32 };
SqlParameter PageCount
=
new
SqlParameter() { ParameterName =
"
@PageCount
"
, Size =
4
, Direction = ParameterDirection.Output , DbType =
DbType.Int32 };
SqlParameter RecordCount
=
new
SqlParameter() { ParameterName =
"
@RecordCount
"
, Size =
4
, Direction = ParameterDirection.Output , DbType =
DbType.Int32 };
DataSet ds
=
new
DataSet();
using
(SqlConnection cnn =
new
SqlConnection(ConfigurationManager.ConnectionStrings[
"
DBConfig
"
].ToString()))
{
SqlCommand cmd
=
cnn.CreateCommand();
cmd.CommandText
=
"
up_ProcCustomPage2005_New
"
;
cmd.CommandType
=
CommandType.StoredProcedure;
cmd.Connection
=
cnn;
cmd.Parameters.Add(SelectSql);
cmd.Parameters.Add(OrderBy);
cmd.Parameters.Add(PageSize);
cmd.Parameters.Add(PageIndex);
cmd.Parameters.Add(PageCount);
cmd.Parameters.Add(RecordCount);
SqlDataAdapter sda
=
new
SqlDataAdapter(cmd);
cnn.Open();
sda.Fill(ds);
pageCount
=
Convert.ToInt32(PageCount.Value);
recordCount
=
Convert.ToInt32(RecordCount.Value);
}
return
ds.Tables[
0
];
}
三、引用例子
public
DataSet GetPurchaserSalesVolumeAnalysis(
string
where
,
string
sFilter_Condition,
int
iPage_Size,
int
iPage_Index,
string
sTaxisField,
int
iTaxis_Sign,
out
int
iPageCount,
out
int
iiRecord_Count)
{
string
sql =
@"
select NewT.ptPaymentDate,NewT.fsStatus from
Student
NewT ";
string
orderwhere =
"
ORDER BY NewT.ptPaymentDate
"
;
return
BaitourDAO.Common.DBHelper.GetExecuteCustomPage_New(
sql
, orderwhere
, iPage_Size
, iPage_Index
,
out
iPageCount
,
out
iiRecord_Count);
}

