执行存储过程时出现异常:
过程或函数'spAddItemByUrl'需要参数'@userId',这是未提供的。
但是我已经初步化了,所以我错了什么?
这是存储过程:
create proc spAddItemByUrl
@title nvarchar(50),
@body nvarchar(50),
@link nvarchar(50),
@userName nvarchar(50),
@url nvarchar(50),
@userId int,
@feedId int
as
begin
insert into feed(title, body, link) values(@title, @body, @link)
select @userId = id from users where name = @userName
select @feedId = id from feed where title = @title
insert into userstofeed(userid, feedid) values(@userId, @feedId)
insert into feedurl(url, feedid, userid) values(@url, @feedId, @userId)
end
这是C#代码。
当我拨打ExecuteNonQuery
时会抛出异常:
connection.SqlCommand.Parameters.AddWithValue("@url", urlFeed.Url);
connection.SqlCommand.Parameters.AddWithValue("@title", item.Title.Text);
connection.SqlCommand.Parameters.AddWithValue("@body", item.Summary.Text);
connection.SqlCommand.Parameters.AddWithValue("@link", item.Id);
connection.SqlCommand.Parameters.AddWithValue("@userName", user);
connection.SqlCommand.ExecuteNonQuery();
connection.SqlCommand.Parameters.Clear();
答案 0 :(得分:2)
您已将@userId int, @feedId int
添加到SProc的参数列表中,但从查询中看起来您不希望用户提供它们。您可以在SProc中声明它们以使它们成为“本地”。
即
create proc spAddItemByUrl
@title nvarchar(50),
@body nvarchar(50),
@link nvarchar(50),
@userName nvarchar(50),
@url nvarchar(50)
as
begin
DECLARE @userId int, @feedId int;
insert into feed(title, body, link) values(@title, @body, @link)
select @userId = id from users where name = @userName
select @feedId = id from feed where title = @title
insert into userstofeed(userid, feedid) values(@userId, @feedId)
insert into feedurl(url, feedid, userid) values(@url, @feedId, @userId)
end
答案 1 :(得分:1)
您已指定
connection.SqlCommand.Parameters.AddWithValue("@userName", user);
但不是@userid
答案 2 :(得分:1)
如果要将默认值添加到存储过程参数,可以执行以下操作:
create proc spAddItemByUrl
...
@userId int = 0, /* or whatever you want the default value to be */
@feedId int = 0
如果您决定调用存储过程,则只需传递代码中提供的五个参数,值@userId
和@feedId
将为0.如果您决定指定值对于调用函数中的这两个参数,将使用您传递的值。
由于您的存储过程不使用这些参数,因此您应该从它们所在的部分中删除它们。
而只是做
declare @userId int = select id from users where name = @userName
declare @feedId int = select id from feed where title = @title