2011-05-18 24 views
1

这是我在DataAccess Layer中编写的函数,我也使用WCF概念.. 这里我必须将一些值插入到RequisitionTable中,并且我已将该表从该表中返回到另一个表中。如何在向表中插入数据时获取由表生成的Id?

在数据库表我指定RequisitionID列的PrimaryKey和自动递增1。 在StoredProcedure的,我宣布RequisitionID作为@RequisitionID int的列

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) 
{ 
    // 
} 
+0

你使用了哪个数据库? – 2011-05-18 06:40:41

+0

int i = dataBase,ExecuteNonQuery(...); int RequisitionID = Convert.ToInt16(i);你认为这个代码应该做什么? :o – 2011-05-18 06:51:19

+0

您使用的是什么数据访问层? ExecuteNonQuery'的返回值很可能是受影响的行数或存储过程的返回值,当存储过程完成时,这两者都不是'@ RequisitionID'参数的值。 – 2011-05-18 07:01:01

回答

2

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

我找不到Database.ExecuteNonQuery在线文档,但是从我的下线帮助:

使用给定的parameterValues返回行的数量的影响

执行的 storedProcedureName

(原创斜体,我加粗)

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

这就是假设您的SP在返回之前正确地将 SCOPE_IDENTITY()分配给此参数,如其他人所暗示的那样。


我还发现题为Executing a Command and Accessing Output Parameters的文章,这是写为企业库在线文档的一部分,但你会发现,不同于MSDN的其他部分,它不会链接到文档对于单个方法,也没有企业图书馆的“参考”部分 - 这几乎就像他们不希望人们找到他们的文档。

2

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

相关问题