当前位置: 首页 > 面试题库 >

防止重复输入数据库

柯昱
2023-03-14
问题内容

我想防止使用vb.net和MySQL作为数据库的清单表单中出现重复条目​​,这是我的代码:

 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    Dim myCommand As New MySqlCommand
    Dim conn As MySqlConnection
    Dim i As String
    conn = New MySqlConnection
    conn.ConnectionString = "server = localhost;username= root;password= a;database= secret"
    Try
        conn.Open()
    Catch mali As MySqlException
        MsgBox("connot establish connection")
    End Try

    Dim intReturn As Integer
    Dim strSql As String = " select * from personnel where pcode = @pcode"

    Dim sqlcmd As New MySqlCommand(strSql, conn)
    With sqlcmd.Parameters
        .AddWithValue("@pcode", CType(pcode.Text, String))
    End With

    intReturn = sqlcmd.ExecuteScalar

    If (intReturn > 0) Then
        cmd = New MySqlCommand("Insert into personnel values('" & pcode.Text & "','" & lname.Text & "','" & fname.Text & "','" & office.Text & "','" & designation.Text & "')")
        i = cmd.ExecuteNonQuery


        If pcode.Text <> "" Then
        ElseIf i > 0 Then
            MsgBox("Save Successfully!", MessageBoxIcon.Information, "Success")
            mrClean()
            ListView1.Tag = ""
            Call objLocker(False)
            Call LVWloader()
            Call calldaw()
        Else
            MsgBox("Save Failed!", MessageBoxIcon.Error, "Error!")
        End If
    Else
        MsgBox("Personnel ID Already Exist!", MessageBoxIcon.Error, "Error!")

    End If

结束子

我在搜索答案时发现了这个问题,但是当我尝试运行它时,它没有读取插入命令,而是即使没有相同的人员ID也会直接转到msbox“人员ID已经存在”。

有人可以检查为什么不阅读插入内容,

我的数据库表值:

pcode =主键

lname =长文本

fname =长文本

办公室=长文本

名称=长文本

任何帮助将不胜感激,谢谢,


问题答案:

抱歉地说这是错误的方法。

数据库具有内置系统,可防止数据重复。这是通过主键或唯一键约束实现的。对于您的情况,您已经创建了一个主键。因此,绝对不需要您执行该SELECT COUNT(*)查询。

而是直接将其插入表中,并在pcode已经存在时捕获完整性错误。

Try
    cmd = New MySqlCommand("Insert into personnel values('" & pcode.Text & "','" & lname.Text & "','" & fname.Text & "','" & office.Text & "','" & designation.Text & "')")

    i = cmd.ExecuteNonQuery


    If pcode.Text <> "" Then
    ElseIf i > 0 Then
        MsgBox("Save Successfully!", MessageBoxIcon.Information, "Success")
        mrClean()
        ListView1.Tag = ""
        Call objLocker(False)
        Call LVWloader()
        Call calldaw()
    Else
        MsgBox("Save Failed!", MessageBoxIcon.Error, "Error!")
    End If
Catch ex As MySqlException
    MsgBox("Personnel ID Already Exist!", MessageBoxIcon.Error, "Error!")
End Try

另请参见MySQL手册页PRIMARY
KEY和UNIQUE索引约束



 类似资料:
  • 问题内容: 每次我通过贝宝付款时,我的信息都会在数据库中捕获,但我想防止重复。那么我该如何解决呢?还是应该检查电子邮件重复项? 编辑 据我所知,pinnaclecart将uid设置为primary。所以将它设置为唯一不是“危险”吗? 问题答案: 名字和姓氏都很好,但是除了唯一之外,其他一切都没有。我认识几个与我同名的人,因此我猜想在这两列上建立唯一索引只会令人沮丧,而无济于事。但是,使我与众不同的

  • 问题内容: 我想提出一种标准做法,以防止任何表在重要的地方重复。在大多数情况下,重复项是变量的组合而不是一个。我的主键只是每个字段的唯一ID,因此我无法使用它们。我一直在做的是先查询表,然后查询所要组合的行数是否为0,然后进行插入。但是,我已经读过,应该有可能在多个字段上设置唯一键以强制唯一性。INSERT IGNORE听起来很可能,但是,我需要在多个列上忽略它。 例如,对于字段关注者和关注对象,

  • 问题内容: 我正在尝试保存要分析的歌曲信息,但是如果该歌曲已经存在于分析中,我希望我的代码什么也不做。 我在下面尝试过此代码: 上面的代码在日志中给出以下结果: 成功取得4分。歌曲已存在成功检索到4个乐谱。歌曲已存在成功检索到4个乐谱。歌曲已存在成功检索到4个乐谱。歌曲已存在成功成功成功成功成功成功成功成功成功成功成功成功 为什么我的for循环比Objects.count循环更多?以及如何防止解析

  • 问题内容: 我有一个表,用于存储有关某些事件重复发生的值,例如,与发生在星期一,星期三和星期五的事件,以及与发生在星期一和星期三的事件。所以我的桌子是这样的: 我的问题是有时(并非总是)我的脚本在数据库中插入重复的值,因此我的表的事件1和2的重复发生率是两倍,如下面的表所示: 如果我在列中添加约束,则事件1仅具有星期一值,但我希望该值具有其余值,例如星期三和星期五。如何添加约束来解决此问题? 问题

  • 问题内容: 我正在工作,我有下表 现在我想防止插入,如果我有一个数据,尽管ID不同但存在数据 请指导我如何编写此触发器。 问题答案: 像这样的东西: 那只是为了插入,您可能也想考虑更新。 更新 一种更简单的方法是在表上创建唯一约束,这也将强制它进行更新并消除对触发器的需求。做就是了: 然后你就可以做生意。

  • 问题内容: 我想创建一个表来存储设备设置。该表具有三行:id,parameter_name和parameter_value。 该表是通过执行以下查询语句创建的: 然后通过执行以下方法存储行: 创建数据库后,将存储默认值: 但是,方法insertRow()的问题在于它无法防止重复输入。 有谁知道在这种情况下如何防止重复输入? 问题答案: 您可以使用列约束。 UNIQUE约束导致在指定列上创建唯一索引