我有一个存储过程如下:
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
最佳答案
在@user2946329 的帮助下以及在 Google 上的一些搜索,我设法找到了答案。 1. 我像这样更改了我的存储过程:
insert into Workshop(title, date, time, mandatory, sid)
values(@title, @date, @time, @mandatory, @sid)
declare @wid int
set @wid = SCOPE_IDENTITY()
select @wid AS wid
我使用 select
语句而不是 return
返回最后插入的行 ID
我设置了 Result column binding
并将返回 id 与我的模型 View 的 id 绑定(bind)
谢谢大家的帮助
关于c# - 使用 LINQ toSQL 从存储过程返回新插入的行 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35111528/