这是我在DataAccess Layer中编写的功能,我也在使用WCF概念。
在这里,我必须向RequisitionTable中插入一些值,并将从该表返回的ID传递到另一个表中。

在数据库表中,我将RequisitionID列指定为主键,并自动加1。
在storedProcedure中,我将RequisitionID声明为@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文档,但是可以从离线帮助中找到:


  使用给定的parameterValues执行storedProcedureName,并返回受影响的行数


(斜体字由我加粗)

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

就像其他人所建议的那样,这是假定您的SP在返回之前已正确将SCOPE_IDENTITY()分配给此参数。



我还找到了一篇名为Executing a Command and Accessing Output Parameters的文章,该文章是作为企业库在线文档的一部分编写的,但是您会注意到,与MSDN的其他部分不同,它没有链接到各个方法的文档,也没有链接到该文档。企业库中是否有“参考”部分-就像他们不希望人们找到他们的文档一样。

关于c# - 将数据插入表时,如何获取表生成的ID?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6040775/

10-13 08:09