Model model=new Model();
model.id=0;
model.name="";
model.surname="";
db.Model.Add(model);
db.SaveChanges();
int id_returned=model.id;
这个块给了我插入行的id字段。
但我使用存储过程进行此插入过程。
Model model=new Model();
model.id=0;
model.name="";
model.surname="";
int returned_id2=db.Sp_Model_insert(model.name, model.surname);
此块插入行。 returned_id2 返回 -1 。
如何获取通过Sp插入的行ID?
这是我的存储过程:
USE [KayaShop]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [KS_ACCOUNTS].[SP_AccountModules_Insert](
@Area nvarchar(50),
@Controller nvarchar(50),
@Action nvarchar(50),
@SubAction nvarchar(50),
@Name nvarchar(50),
@TopName nvarchar(50),
@Level int,
@Visible int,
@Clickable int,
@HomePage int,
@Icon nvarchar(20),
@Status int
)
AS
BEGIN
SET NOCOUNT ON
INSERT INTO [KS_ACCOUNTS].[AccountModules]
([Area]
,[Controller]
,[Action]
,[SubAction]
,[Name]
,[TopName]
,[Level]
,[Visible]
,[Clickable]
,[HomePage]
,[Icon]
,[Status])
VALUES
(@Area,
@Controller,
@Action,
@SubAction,
@Name,
@TopName,
@Level,
@Visible,
@Clickable,
@HomePage,
@Icon,
@Status)
END
答案 0 :(得分:1)
多种方式:
SCOPE_IDENTITY()
- https://msdn.microsoft.com/en-us/library/ms190315.aspx - 返回当前会话当前范围中的最后一个IDENTITY
值。@@IDENTITY
- https://msdn.microsoft.com/en-us/library/ms187342.aspx - 返回当前会话中的最后一个IDENTITY
值(无论范围如何)。INSERT INTO ... VALUES ... OUTPUT
- https://msdn.microsoft.com/en-us/library/ms177564.aspx - 输出所有插入的值,包括IDENTITY
值,这是IDENTITY
语句将检索INSERT
值的唯一方法插入多行。由于您的存储过程似乎只插入一行,因此您可以使用SCOPE_IDENTITY
。
请注意,如果您的所有存储过程都是INSERT
,那么您可能不需要存储过程,您的数据库客户端代码应该直接执行INSERT
。
请注意,您不应使用RETURN
关键字将IDENTITY
值返回给调用者,您应该使用输出参数 - 存储过程的返回值旨在传达状态信息仅限于int
值(例如,成功返回0
)。
答案 1 :(得分:1)
SELECT SCOPE_IDENTITY()
在存储过程中的插入查询后添加此内容
答案 2 :(得分:0)
我将这些行添加到我的sp:
的末尾SELECT @Id =SCOPE_IDENTITY()
RETURN
在我的代码方面:
int Id = 0;
ObjectParameter prm = new ObjectParameter("Id", typeof(int));
DB.SP_AccountModules_Insert(DTO.Area, DTO.Controller, DTO.Action, DTO.SubAction, DTO.Name, DTO.TopName, DTO.Level, DTO.Visible, DTO.Clickable, DTO.HomePage, DTO.Icon, DTO.Status, prm);
Id = Convert.ToInt32(prm.Value);
return Id;
我从我的代码发送和输出参数到我的sp,然后我将最后插入的id分配给我的参数并将其返回到我的代码。而已。 谢谢你的帮助。