【问题标题】:How to Add an error message box for duplicate id?如何为重复 ID 添加错误消息框?
【发布时间】:2021-04-16 05:53:50
【问题描述】:

这是我为我的数据库输入记录的代码。如果我放一个副本,它只会终止程序。我的目标是放置一个显示错误的消息框,以便程序不会终止。

   Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

    MysqlConn = New MySqlConnection("server=localhost; user=root; pwd=; database=payrollmanagement")
    MysqlConn.Open()
    command = New MySqlCommand("INSERT INTO emp_info(empID,lastname,firstname,MiddleInitial,Age,address,Position,ContactNumber,pay_type,gender,dept,email) Values ('" & TextBox1.Text & "','" & TextBox5.Text & "','" & TextBox6.Text & "','" & TextBox7.Text & "','" & TextBox11.Text & "','" & TextBox3.Text & "','" & TextBox10.Text & "','" & TextBox4.Text & "','" & TextBox8.Text & "','" & TextBox10.Text & "','" & TextBox2.Text & "','" & TextBox14.Text & "')", MysqlConn)
    If (TextBox1.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ElseIf (TextBox2.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ElseIf (TextBox3.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ElseIf (TextBox4.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ElseIf (TextBox5.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ElseIf (TextBox6.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ElseIf (TextBox7.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ElseIf (TextBox8.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ElseIf (TextBox9.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ElseIf (TextBox10.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ElseIf (TextBox11.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ElseIf (TextBox14.Text = "") Then
        MessageBox.Show("Data not Inserted")
    Else
        command.ExecuteNonQuery()
        MessageBox.Show("Data Inserted")
        Shadows_load()
    End If
End Sub

【问题讨论】:

  • 这里有很多问题。您需要添加一个 try/catch 来捕获异常。但这是你的小问题。让我们尝试在您用于姓氏的文本框中添加一个单引号。或者更糟糕的是,让我们输入一些 sql 文本,例如 this comic。最后,为什么要让用户输入 ID?让数据库选择一个用 AUTOINCREMENT=True 标记列
  • 只有使用参数化查询stackoverflow.com/questions/16167924/… 才能解决文本框值的字符串连接问题
  • 您打开了一个连接,然后显示了十几个消息框。为什么?您在不允许用户更正问题的情况下执行命令。人脉是宝贵的资源。它们只能在执行前直接打开,并尽快关闭和处置。

标签: mysql database vb.net visual-studio


【解决方案1】:

添加一个MySqlDataReader类,以便程序可以读取数据库中是否存在任何现有数据

MysqlConn = New MySqlConnection("//YourConnection")
MysqlConn.Open()
command = New MySqlCommand("//Your sql")
MySqlDataReader reader;
reader = command.ExecuteReader()

If reader.Read() = true Then 'This will solve your problem
   MessageBox.Show("There is already existing data.")
Else
 If (TextBox1.Text = "") Then
        MessageBox.Show("Data not Inserted")
    ...
    Else
        command.ExecuteNonQuery()
        MessageBox.Show("Data Inserted")
        Shadows_load()
    End If
End If

【讨论】:

  • 您可以使用 Where 子句 WHERE NOT EXISTS 和子查询进行插入,并将额外的命中保存到数据库中。
【解决方案2】:

如果所有文本框都用于插入数据,则可以循环遍历文本框以添加错误消息框。

    For Each c As Control In Controls
        If TypeOf c Is TextBox Then
            If c.Text = "" Then
                MessageBox.Show("Data not Inserted")
            End If
        End If
    Next

您还可以使用“Tag”或“TabIndex”属性来标识每个文本框。

【讨论】:

  • 您可以将其缩短为For Each tb In Controls.OfType(Of TextBox)
【解决方案3】:

首先运行验证代码,如果正常,然后尝试插入新用户。如果 id 不存在,Insert 语句只会添加用户。

Private Function ValidateInput() As Boolean
    For Each tb In Controls.OfType(Of TextBox)
        If tb.Text = "" Then
            MessageBox.Show("Data not Inserted")
            tb.Focus()
            Return False
        End If
    Next
    Return True
End Function

Private Function InsertUser(id As String, lname As String, fname As String, middle As String) As Integer
    Dim sql = "INSERT INTO dbusers (empID, lastname, firstname, MiddleInitial)
                Select @ID, @LName, @FName @MiddleIn
                WHERE Not EXISTS
                (SELECT * FROM dbusers WHERE empID = @ID);"
    Dim RetVal As Integer
    Using cn As New MySqlConnection("server=localhost; user=root; pwd=; database=payrollmanagement"),
            cmd As New MySqlCommand(sql, cn)
        With cmd.Parameters
            .Add("@Id", MySqlDbType.VarChar).Value = id
            .Add("@LName", MySqlDbType.VarChar).Value = lname
            .Add("@FName", MySqlDbType.VarChar).Value = fname
            .Add("@MiddleInitial", MySqlDbType.VarChar).Value = middle
        End With
        cn.Open()
        RetVal = cmd.ExecuteNonQuery()
    End Using
    Return RetVal
End Function

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
    If ValidateInput() Then
        Dim RowsEffected = InsertUser(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text)
        If RowsEffected = 1 Then
            MessageBox.Show("Successful insert.")
        Else
            MessageBox.Show("Error with insert.")
        End If
    End If
End Sub

【讨论】:

    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2021-10-14
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多