插入后mysql中的重复记录

插入后mysql中的重复记录,mysql,vb.net,vb.net-2010,Mysql,Vb.net,Vb.net 2010,快给你一个。 我正在使用以下代码将一条记录插入mysql数据库中的两个表中 SQLConnection.ConnectionString = connectionstring Try If SQLConnection.State = ConnectionState.Closed Then SQLConnection.Open() Dim SQLStatement As String = "INSERT INTO hosts(

快给你一个。 我正在使用以下代码将一条记录插入mysql数据库中的两个表中

SQLConnection.ConnectionString = connectionstring
    Try
        If SQLConnection.State = ConnectionState.Closed Then
            SQLConnection.Open()
            Dim SQLStatement As String = "INSERT INTO hosts(name, description, host, type, port, hostname) VALUES('" & txtname.Text & "','" & txtdescription.Text & "','" & txthost.Text & "','" & cmbtype.Text & "','" & txtport.Text & "','" & Pinger.resolvedstatus.Text & "'); SELECT LAST_INSERT_ID()"
            SaveData(SQLStatement)

            SQLConnection.Open()
            SQLStatement = "INSERT INTO credentials(hosts_linked_id, username, password, type) VALUES('" & hosts_linked_id & "','" & txtusername.Text & "','" & txtpwd.Text & "','" & cmbtype.Text & "')"
            SaveData(SQLStatement)
Savedata()
位调用此函数

    Public Sub SaveData(ByRef SQLStatement As String)
    Dim cmd As MySqlCommand = New MySqlCommand

    cmd.CommandText = SQLStatement
    cmd.CommandType = CommandType.Text
    cmd.Connection = SQLConnection
    cmd.ExecuteNonQuery()
    hosts_linked_id = CInt(cmd.ExecuteScalar())

    SQLConnection.Close()
    MsgBox("Host has been added - Host ID " & hosts_linked_id & "")
    txtname.Text = ""
    txtdescription.Text = ""
    txthost.Text = ""
    cmbtype.Text = ""
    txtport.Text = ""
End Sub
代码的工作原理是将必要的记录插入到“主机”和“凭据”表中,但在每个表中,记录插入两次

显然,我不希望数据库中有重复的记录,所以有人能帮我阻止它执行两次插入吗

提前谢谢

你叫它两次:

cmd.ExecuteNonQuery()
hosts_linked_id = CInt(cmd.ExecuteScalar())
一次作为
ExecuteNonQuery
,第二次作为
ExecuteScalar()

您需要删除其中一个。看看代码,我想您可能需要在
SaveData
方法中引入一个参数来说明要使用哪个方法。

您可以调用它两次:

cmd.ExecuteNonQuery()
hosts_linked_id = CInt(cmd.ExecuteScalar())
cmd.ExecuteNonQuery()
hosts_linked_id = CInt(cmd.ExecuteScalar())
一次作为
ExecuteNonQuery
,第二次作为
ExecuteScalar()

您需要删除其中一个。看看代码,我想您可能需要在
SaveData
方法中引入一个参数来说明使用哪个方法

cmd.ExecuteNonQuery()
hosts_linked_id = CInt(cmd.ExecuteScalar())
删除
cmd.ExecuteNonQuery()
以避免插入两次


删除
cmd.ExecuteNonQuery()
以避免插入两次

太棒了,谢谢Szymon!我已经将savedata函数复制到一个单独的函数中,用于保存凭据并分别调用每个凭据。太棒了,谢谢Szymon!我已经将savedata函数复制到一个单独的函数中,用于保存凭据并分别调用每个凭据。