VB.NET 在 mysql 中插入数据时出现重复

问题描述

我正在尝试在 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...