存储过程分页,出错!为什么?

wtle 2013-09-21 07:01:25

C#:
private void bind(int PageIndex)
{
string sql = "flag='0'";
int PageSize = Convert.ToInt16(DBConfig.PageSize);
DataSet ds = new DataSet();
DB.OpenConnection();
SqlCommand cmd = new SqlCommand("sp_All_Pager2", DBConfig.cn);
cmd.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters["@tblName"].Value = "HR";
cmd.Parameters["@fldNames"].Value = "id,name";
cmd.Parameters["@fldNames2"].Value = "(SELECT pid FROM HR2 WHERE (HRid = tmpTable.id)) AS pid";
cmd.Parameters["@fldOrderName"].Value = "id";
cmd.Parameters["@orderType"].Value = 0;
cmd.Parameters["@PageIndex"].Value = PageIndex;
cmd.Parameters["@PageSize"].Value = PageSize;
cmd.Parameters["@strWhere"].Value = sql;
cmd.Parameters["@totalCount"].Direction = ParameterDirection.Output;
SqlDataAdapter dp = new SqlDataAdapter();
dp.SelectCommand = cmd;
dp.Fill(ds, "hrdocmi");
int PageCount;
int RecordCount = Convert.ToInt32(cmd.Parameters["@totalCount"].Value);
if (RecordCount == 0)
{
PageCount = 1;
}
else
{
if (RecordCount % PageSize == 0)
PageCount = RecordCount / PageSize;
else
PageCount = RecordCount / PageSize + 1;
}
this.PageNavigator1.PageCount = PageCount;
this.PageNavigator1.PageIndex = PageIndex;
this.PageNavigator1.RecordCount = RecordCount;
Repeater1.DataSource = ds.Tables[0];
Repeater1.DataBind();
ds.Clear();
dp.Dispose();
DB.CloseConnection();
}
...全文
370 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-09-21
  • 打赏
  • 举报
回复
报什么异常,把异常信息完整贴入google,就有答案。 估计你存储过程也是抄来的,煞有介事贴一大堆代码有什么用。
wtle 2013-09-21
  • 打赏
  • 举报
回复
存储过程:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go



create PROCEDURE [dbo].[sp_All_Pager2]
@tblName nvarchar(255),--表名
@fldNames nvarchar(1000)='*',--字段列表(默认所有字段)
@fldNames2 nvarchar(1000)='',--字段列表2(默认空)
@fldOrderName nvarchar(255),--主键字段(排序用)
@orderType bit =0,--排序类型,非0则降序(默认升序)
@pageIndex int=1,--页码
@pageSize int =20,--页大小
@strWhere nvarchar(1500)='',--查询条件,不带where
@limitCount int =5000, --限制最多取5000条数据
@totalCount int output --总记录数
AS
BEGIN
SET NOCOUNT ON;
declare @strSQL nvarchar(4000)--主语句
declare @strTable nvarchar(500)--主查询临时表
declare @strOrderSQL nvarchar(1000)--总数查询语句
declare @strOutParam nvarchar(500)--输出参数
declare @strTmp nvarchar(255)--临时分页字句 max 和min
declare @strOrder nvarchar(255)--排序参数

--设置排序
if(@orderType != 0)
begin
set @strTmp = ' <(select min '
set @strOrder = ' order by [' + @fldOrderName +'] desc'
end
else
begin
set @strTmp = ' >(select max '
set @strOrder = ' order by [' + @fldOrderName +'] asc'
end
--设置主查询临时表
if(@strWhere!='')
set @strTable='(select top '+STR(@limitCount)+' '+@fldNames+' from ['+@tblName+'] where '+@strWhere+') as tmpTable'
else
set @strTable='(select top '+STR(@limitCount)+' '+@fldNames+' from ['+@tblName+']) as tmpTable'
--设置总数查询语句和主语句
set @strOrderSQL=N'select @totalCountOut=count(1) from '+@strTable
set @strOutParam=N'@totalCountOut int output'
if (@pageIndex = 1)
set @strSQL = 'select top ' + str(@pageSize) +' '+@fldNames + ',' +@fldNames2+ ' from ' + @strTable + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@fldNames + ',' +@fldNames2+ ' from ' + @strTable + ' where [' + @fldOrderName + ']' + @strTmp + '(['+ @fldOrderName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldOrderName + '] from ' + @strTable + @strOrder + ') as tblTmp) ' + @strOrder
exec sp_executesql @strOrderSQL,@strOutParam,@totalCountOut=@totalCount output
exec sp_executesql @strSQL
--print @strSQL
END

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧