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();这步出错啦,提示“指定了过多的参数”,这问题纠结了很久 , 很蛋疼,
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
存储过程有改动吗?
没看仔细, 谢谢回复
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;
你可以试一下
谢谢回复,应该是存储过程的问题, 你的这种写法也可以,和我写效果是一样,我测试了调用其他的存储过程都没问题,, 你下面的回复,存储过程有改动吗?
谢谢回复,应该是存储过程的问题, 你的这种写法也可以,和我写效果是一样,我测试了调用其他的存储过程都没问题,
就是这段代码问题: cmd.Parameters.Add("@ii", "").Direction = ParameterDirection.Output;
解法:过程中再加入@ii int output参数;如楼上所示。
或去掉cmd.Parameters.Add("@ii", "").Direction = ParameterDirection.Output;
在修改一下你的存储过程:
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