我正在尝试在本地数据库中插入一条记录,之后我想获取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的好方法。
答案 0 :(得分:0)
我找到了解决方案,只需使用:
Dim id As Integer = MysqlCommand.LastInsertedId
答案 1 :(得分:0)
MysqlCommand.ExecuteNonQuery()
,而是使用MysqlCommand.ExecuteScalar()
我也注意到你添加了所有参数等,调用MysqlCommand.ExecuteNonQuery()
然后你再次尝试使用executioncalar(),这就是说再次运行这个存储过程。摆脱第一个MysqlCommand.ExecuteNonQuery()
,只使用你分配给ID的那个