首页 新闻 搜索 专区 学院

存储过程调用 指定了过多的参数 ,有木有大牛来,100%结贴###################

0
悬赏园豆:10 [已解决问题] 解决于 2013-09-22 14:06

 ALTER proc [dbo].[Up_CheckManagerSession]
@userId   varchar(20) ,
@ItemUrl varchar(50)
as
 

declare @ItemList varchar(300);

declare @ItemId  varchar (10)

select @ItemId=ItemId from TR_Item where ItemUrl=@ItemUrl
select @ItemList=ItemList from ManagerTb where UserId=@userId;
 
declare @sql nvarchar(3000)
declare @ii int  
set @sql ='select @i= count(1) from  ManagerTb where userId='''+@userId+''' and '''+@ItemId+''' in('+@ItemList+')'
 exec sp_executesql @sql ,N'@i int  out',@i=@ii out
 

 


 


 后面调用关键代码如下:

     con = new SqlConnection(StrCon);
            SqlCommand cmd = new SqlCommand("Up_CheckManagerSession", con); //调用存储过程

            cmd.CommandType = CommandType.StoredProcedure;
            con.Open();
            cmd.Parameters.Add("@ItemUrl", patp);
            cmd.Parameters.Add("@userId", context.Session["ManagerId"].ToString());
            cmd.Parameters.Add("@ii", "").Direction = ParameterDirection.Output;
            cmd.ExecuteNonQuery();

 

问题: 为什么执行到cmd.ExecuteNonQuery();这步出错啦,提示“指定了过多的参数”,这问题纠结了很久 , 很蛋疼,

t101lian的主页 t101lian | 初学一级 | 园豆:32
提问于:2013-09-22 13:12
< >
分享
最佳答案
0
ALTER proc [dbo].[Up_CheckManagerSession]
@userId   varchar(20) ,
@ItemUrl varchar(50),
@ii int output
as
 

declare @ItemList varchar(300);

declare @ItemId  varchar (10)

select @ItemId=ItemId from TR_Item where ItemUrl=@ItemUrl
select @ItemList=ItemList from ManagerTb where UserId=@userId;
 
declare @sql nvarchar(3000)  
set @sql ='select @i= count(1) from  ManagerTb where userId='''+@userId+''' and '''+@ItemId+''' in('+@ItemList+')'
 exec sp_executesql @sql ,N'@i int  out',@i=@ii out
收获园豆:4
guwoow | 小虾三级 |园豆:611 | 2013-09-22 13:36

存储过程有改动吗?

t101lian | 园豆:32 (初学一级) | 2013-09-22 13:48

 没看仔细, 谢谢回复

t101lian | 园豆:32 (初学一级) | 2013-09-22 13:51
其他回答(3)
0

cmd.Parameters.Add("@ii", "").Direction = ParameterDirection.Output;//获取

是不是这句代码的问题?你可以尝试这种 SqlParameter("@pageIndex",DbType.Int32),

然后 param[0].Value = pageIndex;

  //为输出参数赋值
            param[2].Direction = ParameterDirection.Output;
            pageCount = (int)param[2].Value;

你可以试一下

收获园豆:2
wolfy | 园豆:2636 (老鸟四级) | 2013-09-22 13:28

谢谢回复,应该是存储过程的问题, 你的这种写法也可以,和我写效果是一样,我测试了调用其他的存储过程都没问题,,   你下面的回复,存储过程有改动吗?

支持(0) 反对(0) t101lian | 园豆:32 (初学一级) | 2013-09-22 13:47

谢谢回复,应该是存储过程的问题, 你的这种写法也可以,和我写效果是一样,我测试了调用其他的存储过程都没问题,

支持(0) 反对(0) t101lian | 园豆:32 (初学一级) | 2013-09-22 13:47
0

就是这段代码问题: cmd.Parameters.Add("@ii", "").Direction = ParameterDirection.Output;

解法:过程中再加入@ii int output参数;如楼上所示。

  或去掉cmd.Parameters.Add("@ii", "").Direction = ParameterDirection.Output;

收获园豆:2
Albert Fei | 园豆:2102 (老鸟四级) | 2013-09-22 13:47
0

在修改一下你的存储过程: 

ALTER proc [dbo].[Up_CheckManagerSession]

@userId   varchar(20) ,

@ItemUrl varchar(50),

@ii int output

as

 

 

declare @ItemList varchar(300);

 

declare @ItemId  varchar (10)

 

select @ItemId=ItemId from TR_Item where ItemUrl=@ItemUrl

select @ItemList=ItemList from ManagerTb where UserId=@userId;

 

declare @sql nvarchar(3000)

declare @ii int  

set @sql ='select @i= count(1) from  ManagerTb where userId='''+@userId+''' and '''+@ItemId+''' in('+@ItemList+')'

 exec sp_executesql @sql ,N'@i int  out',@i=@ii out

收获园豆:2
一花一四季,一梦一世界 | 园豆:232 (菜鸟二级) | 2013-09-22 13:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册