【问题标题】:How to Prevent duplicate record from being saved如何防止重复记录被保存
【发布时间】:2013-02-14 18:41:46
【问题描述】:

以下代码阻止我保存新记录。如果有人可以为我编辑它,我会很高兴。无论记录是否存在,都会提示“记录存在”。

试试

        If String.IsNullOrEmpty(subject_id) Or rbnCore.Checked = False And rdbElective.Checked = False Or String.IsNullOrEmpty(username) Or String.IsNullOrEmpty(password) Then
            MessageBox.Show("One or more fields have not been left empty.", "Save Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
            txtSubjectCode.Focus()
        Else
            If rbnCore.Checked = True Then
                subject = "Core"
            Else : subject = "Elective"
            End If

            cmd2 = New SqlCommand("select count(*) from ProgramDetails.Subjects where IdNumber = " & txtIDNumber.Text & " ", cn)
            queryResult = cmd2.ExecuteScalar
            If queryResult = 0 Then
                qry = "Insert into ProgramDetails.Subjects(SubjectCode,SubjectName,SubjectType,UserID,Password)values(@SubjectCode,@SubjectName,@SubjectType,@UserID,@Password)"
                cmd = New SqlCommand(qry, cn)
                cmd.Parameters.Add(New SqlParameter("@SubjectCode", txtSubjectCode.Text))
                cmd.Parameters.Add(New SqlParameter("@SubjectName", txtSubName.Text))
                cmd.Parameters.Add(New SqlParameter("@SubjectType", subject))
                cmd.Parameters.Add(New SqlParameter("@UserID", txtUserName.Text))
                cmd.Parameters.Add(New SqlParameter("@Password", txtPassword.Text))
                cmd.ExecuteNonQuery()
                MessageBox.Show("Record successfully saved", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information)
                btnSave.Enabled = False
                btnClear.Focus()
                showgrid()
            End If
            MessageBox.Show("Record already exists", "Existing record", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

【问题讨论】:

  • ?因此,您不希望用户能够添加新行吗?有一个非常简单的写法...
  • SQL 注入与无法自动处理测试和插入的完美结合。你想要多少代码?
  • 我希望用户只能保存新记录。

标签: sql-server vb.net tsql


【解决方案1】:

您错过了条件 if 语句的另一半。

     If queryResult = 0 Then
            qry = "Insert into ProgramDetails.Subjects(SubjectCode,SubjectName,SubjectType,UserID,Password)values(@SubjectCode,@SubjectName,@SubjectType,@UserID,@Password)"
            cmd = New SqlCommand(qry, cn)
            cmd.Parameters.Add(New SqlParameter("@SubjectCode", txtSubjectCode.Text))
            cmd.Parameters.Add(New SqlParameter("@SubjectName", txtSubName.Text))
            cmd.Parameters.Add(New SqlParameter("@SubjectType", subject))
            cmd.Parameters.Add(New SqlParameter("@UserID", txtUserName.Text))
            cmd.Parameters.Add(New SqlParameter("@Password", txtPassword.Text))
            cmd.ExecuteNonQuery()
            MessageBox.Show("Record successfully saved", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information)
            btnSave.Enabled = False
            btnClear.Focus()
            showgrid()
        Else

MessageBox.Show("记录已存在", "已有记录", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End If

这应该给你你想要的。

【讨论】:

  • 糟糕,代码输入错误,抱歉。总之,如果您查看原始代码,您将始终收到消息,因为它遵循 if 语句而不是它的一部分。如果满足某些条件,则执行某项操作,否则执行其他操作。
  • 请完整的代码是我发布的。请对其进行编辑以使用户能够添加新记录并防止添加重复记录。
【解决方案2】:
 Dim cmd2 As New SqlCommand
    Dim queryResult As Integer
     Try
        cmd2 = New SqlCommand("select count(*) from ProgramDetails.Subjects where IDNumber = '" & txtIDNumber.Text & "'", cn)
        queryResult = cmd2.ExecuteScalar
        If queryResult = 0 Then
            If String.IsNullOrEmpty(subject_id) Or rbnCore.Checked = False And rdbElective.Checked = False Or String.IsNullOrEmpty(username) Or String.IsNullOrEmpty(password) Then
                MessageBox.Show("One or more fields have not been left empty.", "Save Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                txtSubjectCode.Focus()
            Else
                If rbnCore.Checked = True Then
                    subject = "Core"
                Else : subject = "Elective"
                End If
                qry = "Insert into ProgramDetails.Subjects(SubjectCode,SubjectName,SubjectType,UserID,Password)values(@SubjectCode,@SubjectName,@SubjectType,@UserID,@Password)"
                cmd = New SqlCommand(qry, cn)
                cmd.Parameters.Add(New SqlParameter("@SubjectCode", txtSubjectCode.Text))
                cmd.Parameters.Add(New SqlParameter("@SubjectName", txtSubName.Text))
                cmd.Parameters.Add(New SqlParameter("@SubjectType", subject))
                cmd.Parameters.Add(New SqlParameter("@UserID", txtUserName.Text))
                cmd.Parameters.Add(New SqlParameter("@Password", txtPassword.Text))
                cmd.ExecuteNonQuery()
                MessageBox.Show("Record successfully saved", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information)

                btnClear.Focus()
                showgrid()
            End If
        Else
            MessageBox.Show("Record already exists.", "Existing Record", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 2016-08-24
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多