如何返回插入查询的最后一个id?

时间:2015-12-10 15:51:23

标签: sql vb.net

我正在尝试在本地数据库中插入一条记录,之后我想获取id'因为我需要重新使用这个id来在另一个表中插入另一条记录。现在这是我的代码:

 ...
 Using dbCon As MySqlConnection = establishConnection()

        Try

            dbCon.Open() 

            Dim MysqlCommand = New MySqlCommand("INSERT INTO users (first_name, last_name, email, 
                                phone_number, address, city, notes, id_roles, data) 
                                OUTPUT INSERTED.ID
                                VALUES(@first_namep, @last_namep, @emailp, @phone_numberp, 
                                @addressp, @cityp, @notesp, @id_rolesp, @data)", dbCon)

            MysqlCommand.Parameters.AddWithValue("@first_namep", name)
            MysqlCommand.Parameters.AddWithValue("@last_namep", last_name)
            MysqlCommand.Parameters.AddWithValue("@emailp", email)
            MysqlCommand.Parameters.AddWithValue("@phone_numberp", phone_number)
            MysqlCommand.Parameters.AddWithValue("@addressp", address)
            MysqlCommand.Parameters.AddWithValue("@cityp", city)
            MysqlCommand.Parameters.AddWithValue("@notesp", notes)
            MysqlCommand.Parameters.AddWithValue("@id_rolesp", customer_id)
            MysqlCommand.Parameters.AddWithValue("@data", 0)

            MysqlCommand.ExecuteNonQuery()  

            Dim id As Integer = MysqlCommand.ExecuteScalar   

            MysqlCommand.Parameters.Clear()


            MysqlCommand.CommandText = "INSERT INTO user_settings (id, username, password, salt)
                                       VALUES(@idp, @usernamep, @passwordp, @saltp)"

            MysqlCommand.Parameters.AddWithValue("@idp", id)
            MysqlCommand.Parameters.AddWithValue("@usernamep", username)
            MysqlCommand.Parameters.AddWithValue("@passwordp", password_hash)
            MysqlCommand.Parameters.AddWithValue("@saltp", password_salt)

            MysqlCommand.ExecuteNonQuery()

        Catch myerror As MySqlException

            MessageBox.Show(myerror.Message)

        Finally

            dbCon.Dispose()

        End Try
    End Using

End Sub

我打开与dbCon.Open()的连接,之后我执行传递所有控件值的参数化查询。现在表上的id是auto_increment所以我写了一下查询:

OUTPUT INSERTED.ID

但是要执行此行:MysqlCommand.ExecuteNonQuery()

我收到此错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在'OUTPUT INSERTED.ID VALUES附近使用正确的语法('Jason','Ruos',''在第3行

我做错了什么?我希望我的.Clear()是重用MySqlCommand的好方法。

2 个答案:

答案 0 :(得分:0)

我找到了解决方案,只需使用:

Dim id As Integer = MysqlCommand.LastInsertedId

答案 1 :(得分:0)

你快到了。不使用MysqlCommand.ExecuteNonQuery(),而是使用MysqlCommand.ExecuteScalar()

我也注意到你添加了所有参数等,调用MysqlCommand.ExecuteNonQuery()然后你再次尝试使用executioncalar(),这就是说再次运行这个存储过程。摆脱第一个MysqlCommand.ExecuteNonQuery(),只使用你分配给ID的那个