这是我在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/