如何在将数据插入表时获取表生成的 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)
{
//
}
我猜这是企业库数据访问应用程序块。
我无法在线找到Database.ExecuteNonQuery
文档,但从我的离线帮助中:
使用给定的参数值执行存储的过程名称,并返回受影响的行数
(原文斜体,粗体由我添加)
我认为您需要使用其他重载之一,其中显式提供命令对象,您已将显式参数对象附加到该对象,包括设置为输出@RequisitionID
参数。
这是假设您的 SP 在返回之前正确分配了
SCOPE_IDENTITY()
此参数,正如其他人所建议的那样。
我还发现了一篇题为"执行命令和访问输出参数"的文章,它是作为企业库联机文档的一部分编写的,但您会注意到,与 MSDN 的其他部分不同,它没有链接到各个方法的文档,也没有企业库的"参考"部分 - 这几乎就像他们不希望人们找到他们的文档一样。
如果数据库引擎是 SQL SERVER,则SCOPE_IDENTITY返回插入到表中的最后一个标识值:
如果您使用的是 SQL Server 2005 或 2008,请在存储过程中使用 SCOPE_IDENTITY()