问题描述
我正在尝试在 MysqL 中插入数据并获取最新 ID,但问题是我正在插入重复数据 是我的语法错误还是什么?
connection.open()
insertString = "INSERT INTO `daily_report`(`saan_nalaman`,`purpose`,`usual_time`,`apps`,`Feedback`,`userid`,`survey_at_what_blh`) VALUES ('" & txtq1.Text & "','" & txtq2.Text & "','" & txtq3.Text & "','" & txtq4.Text & "','" & txtq5.Text & "','" & Utilities.UserID & "','" & Login.RichTextBox1.Text & "');SELECT last_insert_id();"
command = New MysqLCommand(insertString,connection)
reader = command.ExecuteReader
connection.Close()
connection.open()
TextBox1.Text = command.ExecuteScalar
connection.Close()
解决方法
在使用它们的方法中声明和处置您的数据库对象。即使出现错误,Using
块也会为我们处理这个问题。 总是使用参数来避免sql注入。此外,它使 sql 命令更易于阅读和编写,无需所有连接和单引号。单个 ExecuteScalar
将完成插入和选择。
Private ConStr As String = "Your connection string"
Private Sub GetID()
Dim insertString = "INSERT INTO `daily_report`(`saan_nalaman`,`purpose`,`usual_time`,`apps`,`feedback`,`userid`,`survey_at_what_blh`) VALUES (@saan,@purpose,@time,@apps,@feedback,@userid,@survey) SELECT last_insert_id();"
Dim id As Integer
Using Command As New MySqlCommand(insertString,New MySqlConnection(ConStr))
With Command.Parameters
.AddWithValue("@saan",txtq1.Text)
.AddWithValue("@purpose",txtq2.Text)
.AddWithValue("@time",txtq3.Text)
.AddWithValue("@apps",txtq4.Text)
.AddWithValue("@feedback",txtq5.Text)
.AddWithValue("@userid",Utilities.UserID)
.AddWithValue("@survey",Login.RichTextBox1.Text)
End With
Command.Connection.Open()
id = CInt(Command.ExecuteScalar)
End Using
TextBox1.Text = id.ToString
End Sub