public DataView ProductsRealPage(int startRowIndex, int maximumRows, string storeID)
        {
            sqlds.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
            sqlds.SelectCommand = "sp_StoreProductList";
            sqlds.SelectParameters.Add("startRowIndex",startRowIndex.ToString());
            sqlds.SelectParameters.Add("maximumRows",maximumRows.ToString());
            sqlds.SelectParameters.Add("storeID", storeID);
            DataView dv=(DataView)sqlds.Select(System.Web.UI.DataSourceSelectArguments.Empty);
            return dv;
        }if exists(select * from sysobjects where name='sp_StoreProductList')
drop proc sp_StoreProductList
go
create proc sp_StoreProductList
(
@startRowIndex int,
@maximumRows int,
@storeID int
)
as 
begin
with temp as 
(select row_number() over(order by productID desc) as rowIndex,* from v_products where storeID=@storeID)
select * from temp where rowIndex between @startRowIndex and @startRowIndex+@maximumRows-1
end
go
exec sp_StoreProductList 1,15,2
go我的存储过程明明要3个参数,但是报错的是我的ProductsRealPage这个方法说提供了多余的参数.什么意思?
然后我试着不提供storeID这个参数,运行页面确没报错,只是没有取出数据出来.
是什么原因啊

解决方案 »

  1.   

    没有shoreID当然不行,没有符合条件的东西,怎么能查询出来了?
      sqlds.SelectParameters.Add("startRowIndex",startRowIndex.ToString());
                sqlds.SelectParameters.Add("maximumRows",maximumRows.ToString());
                sqlds.SelectParameters.Add("storeID", storeID);这里前两个参数都传的的tostring的第三个居然没有,可以自己检查下,是不是自己大意了
      

  2.   

    sqlds.SelectParameters.Add("storeID", storeID);
    改成
    sqlds.SelectParameters.Add("storeID", int.parse(storeID));
    你存储过程里是int,而你传进来的确是字符串。
      

  3.   


    那是因为我方法形参startRowIndex,maximumRows是int型的,而我storeID是string类型的
      

  4.   


    为过程或函数 sp_StoreProductList 指定了过多的参数。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 为过程或函数 sp_StoreProductList 指定了过多的参数。源错误: 
    行 216:            sqlds.SelectParameters.Add("maximumRows",maximumRows.ToString());
    行 217:            sqlds.SelectParameters.Add("storeID", storeID);
    行 218:            DataView dv=(DataView)sqlds.Select(System.Web.UI.DataSourceSelectArguments.Empty);
    行 219:            return dv;
    行 220:        }
      

  5.   


    sqlds.SelectParameters.Add(string 形参1,string 形参2)sqlds.SelectParameters.Add(string 形参1,int 形参2) --没有这样的重载
      

  6.   

    sqlds.SelectParameters.Add("@startRowIndex",startRowIndex.ToString());
    统统少了@
      

  7.   

    你试过这样写了?
    sqlds.SelectParameters.Add("storeID", int.parse(storeID)); 
      

  8.   


    是的,试了,我还看了MSDN.就3个重载.
      

  9.   

    肯定得加sqlds.SelectParameters.Add("startRowIndex",startRowIndex)
                sqlds.SelectParameters.Add("maximumRows",maximumRows)
                sqlds.SelectParameters.Add("storeID", storeID);类型都不对.int
      

  10.   

    我就是觉得他存储过程里是int传进来却是string所以给他转换了一下int.parse()
      

  11.   

    问题解决.在3个sqlds.SelectParameters.Add方法前加一个sqlds.SelectParameters.Clear();
    我的这3个sqlds.SelectParameters.Add没问题
    问题是因为我另外有个方法共用了这个数据源控件为它赋了一个值..谢谢大家帮忙!