如何在将数据插入表时获取表生成的 Id

本文关键字:获取 Id 数据 插入 | 更新日期: 2023-09-27 17:56:52

这是我在DataAccess Layer中编写的函数,我也在使用WCF概念。在这里,我必须将一些值插入到申请表中,并且必须将从该表返回的 Id 传递到另一个表中。

在数据库表中,我将申请 ID 列指定为主键并自动递增 1。在存储过程中,我将申请 ID 声明为 @RequisitionID int OUT

public RequisitionDTO createRequisition(RequisitionDTO requisitionDTO)
{
Logging.logDebug("RequisitionDA: createRequisition initiated");
DataTable requisitionDataTable = new DataTable();
try
{
  Database dataBase = CommonDB.getApplicationDatabase();
  //Insert and Store Id into variable 'i'  
  int i= dataBase.ExecuteNonQuery("SP_requisitionInsert",
     requisitionDTO.FirstName, requisitionDTO.MiddleName,    
     requisitionDTO.LastName,requisitionDTO.Address);
  int RequisitionID = Convert.ToInt16(i);
}
catch(exception e)
{
  //
}

如何在将数据插入表时获取表生成的 Id

我猜这是企业库数据访问应用程序块。

我无法在线找到Database.ExecuteNonQuery文档,但从我的离线帮助中:

使用给定的参数值执行存储的过程名称,并返回受影响的行数

(原文斜体,粗体由我添加)

我认为您需要使用其他重载之一,其中显式提供命令对象,您已将显式参数对象附加到该对象,包括设置为输出@RequisitionID参数。

这是假设您的 SP 在返回之前正确分配了SCOPE_IDENTITY()此参数,正如其他人所建议的那样。


我还发现了一篇题为"执行命令和访问输出参数"的文章,它是作为企业库联机文档的一部分编写的,但您会注意到,与 MSDN 的其他部分不同,它没有链接到各个方法的文档,也没有企业库的"参考"部分 - 这几乎就像他们不希望人们找到他们的文档一样。

如果数据库引擎是 SQL SERVER,则SCOPE_IDENTITY返回插入到表中的最后一个标识值:

如果您使用的是 SQL Server 2005 或 2008,请在存储过程中使用 SCOPE_IDENTITY()