我的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
以进行下一步处理。
我的问题是:
当主键未primary key
时,是否可以获得insert statement
的{{1}}?
答案 0 :(得分: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 Injection并解析问题。
答案 1 :(得分:0)
我的sql使用
提供最后一个插入IDSELECT LAST_INSERT_ID();
答案 2 :(得分:0)
您还可以使用SELECT MAX查询显示最后插入的ID的编号
query = "SELECT MAX(matchID)"