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