【发布时间】:2016-01-31 07:47:47
【问题描述】:
我有一个存储过程如下:
ALTER PROCEDURE [dbo].[Addworkshop]
@title varchar(100),
@time varchar(10),
@date date,
@mandatory int,
@sid int
AS
BEGIN
SET NOCOUNT ON;
insert into Workshop(title, date, time, mandatory, sid)
values(@title, @date, @time, @mandatory, @sid)
declare @wid int
set @wid = scope_identity()
return @wid
END
我在 ASP.NET MVC5 C# 中的操作方法中调用它:
public JsonResult addWorkshop(Workshop workshop)
{
TLCWREntities context = new TLCWREntities();
var wid = db.Addworkshop(workshop.title, workshop.time, workshop.date, workshop.mandatory, workshop.sid);
return Json(wid);
}
使用 JSON ajax 调用此方法:
$.ajax({
type: 'POST',
url: '@Url.Action("addWorkshop")', // we are calling json method
dataType: 'json',
data: $.toDictionary(wsData),
success: function (wid) {
console.log("success add workshop wid: "+wid);
},
error: function (ex) {
console.log("err add workshop");
}
});
数据已成功插入到表中,当我在 SQL Server Management Studio 中执行存储过程时,它会返回正确的新插入行 ID。但是,当我使用 JSON ajax 和操作方法调用存储过程时,它总是返回 -1。
我正在开发 Visual Studio 2013 MVC5 C# 和 SQL Server Studio 2008
【问题讨论】:
-
返回前
wid的值是多少? -
对于您的问题@iuliu.net wid 的值是插入操作期间创建的id。但由于某种原因,从 ASP.NET 中调用 SP 时返回 -1
-
@user2946329 我查看了链接,我正在做与答案完全相同的事情。唯一的区别是我没有从存储过程中返回实体。相反,我只是返回一个整数
-
@Alsmayer...所以你应该选择过程的返回值为
Scalar。那么它应该可以工作了。
标签: c# sql-server linq stored-procedures