2011-05-18 111 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返回插入到表中的最後一個標識值:

相關問題