2015-06-17 119 views
1

我有以下兩個表:插入語句輸出第

Game_Information

gameId(PK) Is Identity(auto-increments) 
gamePrice 
name 
edition 
date 

Game_Notes

noteId(PK) Is Identity(auto-increments) 
notes 
noteDate 
gameId(FK) 

我目前正在試圖WebMatrix中,將允許編寫一個頁面CSHTML我在兩張桌子上添加關於我的遊戲集合的信息,但我無法讓遊戲ID在兩張桌子上匹配,所以多張筆記引用一個遊戲。

我試過如下:而不是新插入的遊戲的正確的ID

var id = db.Execute("INSERT INTO Game_Information (gamePrice, name, edition, addedDate) output Inserted.gameId VALUES (@0, @1, @2, @4)", gamePrice, name, edition, date); 

db.Execute("INSERT INTO Game_Notes(gameId, notes, noteDate) VALUES (@0, @1, @2)", id, notes, noteDate); 

這使信息到所需的列,但「遊戲ID」插入Game_Notes總是默認爲「1」。

所以我試過如下:

db.Execute("INSERT INTO Game_Information (gamePrice, name, edition) output Inserted.gameId, Inserted.date INTO Game_Notes(gameId, noteDate) VALUES (@0, @1, @2)", gamePrice, name, edition); 

這就將正確的ID爲「遊戲ID」,於是就有了兩個表之間的比賽,但現在我失去了如何獲得「注意事項」變成同一行。做第二次插入顯然是不可能的,並且在表格的最後一行進行更新似乎不是一個明智的想法。

任何人有什麼我可以在這裏做什麼祕訣?我正在考慮重構插入以適應Notes變量是關鍵,但我一直打它的牆。

+0

你實際上是在尋找這樣的事情? http://stackoverflow.com/questions/1920558/what-is-the-difference-between-scope-identity-identity-identity-and-ide –

+0

我不知道什麼是WebMatrix中。你確定Execute函數返回你選擇的內容嗎?可能是1只是這個函數成功的結果嗎? –

+0

我知道SCOPE_IDENTITY,但我真的覺得這將是矯枉過正,在這種情況下。 @Giorgi,如果是這種情況,我將如何獲得db.execute將gamerId傳遞給變量「id」? – LearningProgrammer

回答

2

正如我所說Database.Execute方法返回受SQL statement記錄的計數。所以你插入一行,結果得到1

Execute方法用於執行一個 數據庫上非查詢命令,諸如SQL刪除,創建,刪除,更新和插入 命令。 https://msdn.microsoft.com/en-us/library/webmatrix.data.database.execute(v=vs.111).aspx

你需要Database.QueryValue方法執行SQL查詢,返回單個標量值作爲結果。

var id = db.QueryValue(... 
+0

謝謝Giorgi Nakeuri。我的完全失敗沒有更多地考慮「1」代表什麼。好吧,這是另一個可憐的錯誤,成爲一個教訓。 – LearningProgrammer