一个SQL分页存储过程,全贴出来 。传参数时奇怪的问题。在线等待。

时间:2021-08-11 19:35:00
CREATE procedure AllProce
@tablename varchar(200) ,   --表名
@strGetFields varchar(200) = '*',  --查询列名
@PageIndex int = 1 ,         --页码
@pageSize int = 15,         --页面大小
@strWhere  varchar(100) = '',     --查询条件
@strOrder varchar(100) = '', --排序列名
@intOrder bit = 0,        --排序类型  1为升序
@CountAll int output              --返回纪录总数用于计算页面数
as
begin
declare @strSql varchar(500)  --主语句
declare @strTemp varchar(100) --临时变量
declare @strOrders varchar(50) --排序语句
declare @table varchar(70)
if @intOrder = 0
begin
    --为0是升序
    set @strTemp = '>(select max'
    set @strOrders =  ' order by  '+@strOrder+' asc '
end
else
begin
    --否则为降序
    set @strTemp = '<(select min'
    set @strOrders = ' order by  '+@strOrder+' desc '
end
if @PageIndex =1        --第一页直接读出纪录
begin
    if @strWhere = ''
    begin
         set @strSql = 'select top '+str(@pageSize)+' '+@strGetFields+' from '+@tablename+' '+@strOrders
         set @table=@tablename
         exec('select 1 from '+@table)
         set @CountAll=@@rowCount
    end
    else  
    begin
         set @strSql = 'select top '+str(@pageSize)+' '+@strGetFields+ ' from '+@tablename+' where '+@strWhere+' '+@strOrders
 set @table=@tablename
         exec('select 1 from '+@table)
         set @CountAll=@@rowCount
    end
end
else
begin
    set @strSql = 'select top'+str(@pageSize)+' '+@strGetFields+' from '+@tablename+' where '+@strOrder+' '+@strTemp+' ('+@strOrder+')'
                  +' from (select top '+str((@pageIndex-1)*@pageSize)+' '+@strGetFields+' from '+@tablename+ ' '+@strOrders+ ') as tempTable ) '+@strOrders
         set @table=@tablename
         exec('select 1 from '+@table)
         set @CountAll=@@rowCount
    if @strWhere != ' '
    begin
       set @strSql = 'select top '+str(@pageSize)+ ' '+@strGetFields+' from '+@tablename+ ' where '+@strOrder+ ' '+@strTemp+' ('+@strOrder+') '
                   +' from(select top '+str((@pageIndex-1)*@pageSize)+' '+@strGetFields+' from '+@tablename+' where '+@strWhere+' ' +@strOrders+') as tempTable) where '+@strWhere+' '+@strOrders
           set @table=@tablename
         exec('select 1 from '+@table)
         set @CountAll=@@rowCount
    end
end 
exec(@strSql)    
exec(@strSqlCount)
end
GO



SqlParameter[] para = new SqlParameter[]
{
new SqlParameter("@tablename",SqlDbType.VarChar,200),
new SqlParameter("@strOrder",SqlDbType.VarChar,100),
new SqlParameter("@CountAll",SqlDbType.Int)
};
para[0].Value="ConsignmentUnitTable";   //表名
para[1].Value="UnitName";               //表里面的主键 varchar型
para[2].Direction=ParameterDirection.Output;
try
{
string connStr="server=localhost;database=GuangMingHuiBaoDepotDataBase;User id=sa;password=;";
ds=SqlHelper.ExecuteDataset(connStr,CommandType.Text,selectStr);
ds = SqlHelper.ExecuteDataset(connStr,CommandType.StoredProcedure,"AllProce",para);
}
catch(Exception eall)
{
Response.Write(eall.Message);
}
当绑定数据到DataSet时
DGridUnit.DataSource=ds;
DGridUnit.DataBind();
提示
DataBinder.Eval:“System.Data.DataRowView”不包含名称为 UnitName 的属性。 
谢谢,已经一个人郁闷很久了

请问下哪里错了?

6 个解决方案

#1


自已顶一下
ds=SqlHelper.ExecuteDataset(connStr,CommandType.Text,selectStr);
这一句是测试用的
不要

#2


你的存储过程有问题 ,我测了一下,不行。

#3


就是说你只是传了参数,没有传排序的参数,导致存储过程执行错误。从而没有结果集产生。所以会出现错误。 你在试试看是不是。

#4


我用它取过一次完全的值
所来有一次鼠标移动
不知将哪里改了

顺便再问一下
在VS里调试存储过程
单步执行的时候为何进不到单条语句中去呢
也就是单步执行看不到效果

#5


"形式参数 '@PageIndex' 定义为 OUTPUT,但实际参数却未声明为 OUTPUT。" "形式参数 '@PageIndex' 定义为 OUTPUT,但实际参数却未声明为 OUTPUT。" string

现在变成这了
是不是参数排序的问题?
我已经弄了好久了
麻烦各位

#6


存储过程没问题
   set @table=@tablename
         exec('select 1 from '+@table)
         set @CountAll=@@rowCount
这三句破坏了存储过程的执行
哪位给解释一下
不胜感激

#1


自已顶一下
ds=SqlHelper.ExecuteDataset(connStr,CommandType.Text,selectStr);
这一句是测试用的
不要

#2


你的存储过程有问题 ,我测了一下,不行。

#3


就是说你只是传了参数,没有传排序的参数,导致存储过程执行错误。从而没有结果集产生。所以会出现错误。 你在试试看是不是。

#4


我用它取过一次完全的值
所来有一次鼠标移动
不知将哪里改了

顺便再问一下
在VS里调试存储过程
单步执行的时候为何进不到单条语句中去呢
也就是单步执行看不到效果

#5


"形式参数 '@PageIndex' 定义为 OUTPUT,但实际参数却未声明为 OUTPUT。" "形式参数 '@PageIndex' 定义为 OUTPUT,但实际参数却未声明为 OUTPUT。" string

现在变成这了
是不是参数排序的问题?
我已经弄了好久了
麻烦各位

#6


存储过程没问题
   set @table=@tablename
         exec('select 1 from '+@table)
         set @CountAll=@@rowCount
这三句破坏了存储过程的执行
哪位给解释一下
不胜感激