2014-03-25 92 views
1

我有一個MySQL數據庫包含這些字段的表:matchID, userID, puzzleID查找記錄的主鍵將插入

其中match ID是主鍵,它已經被設置爲auto increment

而作爲代碼以下爲:

query = "INSERT INTO matches(UserID, PuzzleID) VALUES('" & UserID _ 
      & "','" & puzzleID & "')" 
da.InsertCommand = New MySqlCommand(query, conn) 
Try 
    da.InsertCommand.ExecuteNonQuery() 
Catch ex As Exception 
    MsgBox(ex.Message) 
    exit sub 
End Try 

然後我需要獲得新插入的行的MatchID處理的下位。

我的問題是:

是否有可能得到一個insert statementprimary key主鍵時不explicitly說?

+0

你可以用'SELECT LAST_INSERT_ID();'在MySQL –

回答

0

我的SQL提供使用最後插入ID

SELECT LAST_INSERT_ID(); 
1

你可以在一個命令中組合兩個SQL語句和檢索的ExecuteScalar的最後一條語句的結果

query = "INSERT INTO matches(UserID, PuzzleID) VALUES(@uid, @pid);" & _ 
     "SELECT LAST_INSERT_ID();" 
Dim cmd = New MySqlCommand(query, conn) 
cmd.Parameters.AddWithValue("@uid", userID) 
cmd.Parameters.AddWithValue("@pid", puzzleID) 
Dim result = Convert.ToInt32(cmd.ExecuteScalar()) 

注意,你應該總是將命令提交到數據庫後端時使用參數化查詢。如果您使用字符串連接和用戶輸入來構建命令文本,那麼您將受到Sql注入和解析問題的困擾。

+0

獲取插入的ID謝謝你,這意味着什麼我可以完全消除數據適配器? – maxG795

+0

當您需要批量更新許多記錄時,適配器很有用。例如,當你有一個網格,並允許你的用戶自由改變,插入和刪除,並且不想立即更新你的分貝,直到用戶確認其更改。如果你只有一條記錄要插入,那麼你可以直接執行插入命令。 – Steve

0

您還可以使用SELECT MAX查詢,顯示插入的最後ID的數量

query = "SELECT MAX(matchID)" 
相關問題