【问题标题】:How to write this stored procedure这个存储过程怎么写
【发布时间】:2012-10-25 23:17:28
【问题描述】:

我有一张桌子Student。该表有一列ID,它是自动递增的。我想编写一个存储过程来添加一个新学生并返回ID。我是这方面的新手。

这是我的代码。请检查它是否错误并为我修复并告诉我如何编写代码以在 C# 中使用它。我使用了实体框架 4。

@Name NVARCHAR(50),
@Birthday DATETIME, 
@ID bigint OUTPUT 
AS 
BEGIN
    SET XACT_ABORT ON 

    BEGIN 
       INSERT INTO [Student](Name, Birthday) VALUES (@Name, @Birthday);  
       SELECT @ID = SCOPE_IDENTITY()
    END
END

【问题讨论】:

  • 我需要在这里展示我所有的尝试吗?
  • 是的,您需要向我们表明您是在寻求帮助,而不是要求我们为您完成工作。
  • 我试图证明这一点,但我的英语太糟糕了:(

标签: c# stored-procedures entity-framework-4


【解决方案1】:

使用EF4 时,最好使用C# 编码而不是SP

使用实体框架,这一切都是自动为您完成的。

using (MyEntities context = new MyEntities())
{
    var student =  new Student()
    {
      Name = "some value",
      Birthday = "some Birthday"
    };

    context.Students.AddObject(student);

    context.SaveChanges();

    int ID = student.ID; // You will get here the Auto-Incremented table ID value.
}

在实体框架中保存将自动更新“自动增量”ID 列。您只需在调用 .SaveChanges(); 后将其读出即可;

编辑:

如果您在获取“自动增量”ID 值时遇到任何问题,请阅读此post

【讨论】:

  • 问题:为什么只有小型记录?
  • 抱歉是错别字.. 您可以使用任何 :)。相应地编辑了帖子。感谢约翰找到。
【解决方案2】:
@Name NVARCHAR(50),
@Birthday DATETIME, 
@ID bigint OUTPUT
AS
BEGIN
SET XACT_ABORT ON   
BEGIN 

    INSERT INTO [Student](Name,Birthday)
    VALUES(@Name,@Birthday);

    SELECT @ID = SCOPE_IDENTITY()
END

我只是在字段之间添加了逗号

【讨论】:

    【解决方案3】:

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.aspx

    这应该为您提供构建调用存储过程的 C# 应用程序所需的所有信息。

    【讨论】:

    • 确实如此,但它用于创建一个可以与 SQLCommand 对象正确使用的 SP。虽然,我知道 Prasad Kanaparthi 提供的答案是一个更好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多