2013-02-14 135 views
-1

以下代碼阻止我保存新記錄。如果有人能爲我編輯它,我會很高興。無論記錄是否存在,都會顯示消息「存在記錄」。如何防止保存重複記錄

嘗試

 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 
+1

?所以你不希望用戶能夠添加新行?有一個非常簡單的方法來寫... – 2013-02-14 18:51:20

+0

SQL注入的一個很好的組合,並失敗處理測試和插入原子。你想要多少代碼? – HABO 2013-02-14 18:52:24

+0

我希望用戶只能保存新記錄。 – Akaglo 2013-02-14 20:05:33

回答

0
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 
0

你已經錯過了你的條件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 

這應該給你想要的東西。

+0

哎呀,搞砸了代碼條目,對不起。在essese中,如果你看看你的原始代碼,你總是會得到這條消息,因爲它遵循if語句而不是它的一部分。如果滿足某些條件,請執行其他操作或執行其他操作。 – 2013-02-14 18:55:42

+0

請整個代碼是我發佈的。請編輯它以使用戶能夠添加新記錄以及防止添加重複記錄。 – Akaglo 2013-02-14 20:17:33