2013-02-14 2 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

? 따라서 사용자가 새로운 행을 추가 할 수 없도록하려면? 그걸 쓰는 아주 쉬운 방법이 있습니다 ... –

+0

SQL 인젝션과 테스트를 처리하고 원자 적으로 삽입하는 데 실패한 좋은 조합입니다. 얼마나 많은 코드를 원하십니까? – HABO

+0

사용자가 새 레코드 만 저장할 수 있기를 원합니다. – Akaglo

답변

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

죄송합니다, 죄송합니다. 원래 코드를 살펴보면 if 문을 따르기 때문에 항상 메시지를 받게됩니다. 어떤 조건이 충족되면 다른 작업을하거나 다른 작업을 수행하십시오. –

+0

전체 코드를 올리십시오. 사용자가 새 레코드를 추가 할 수있을뿐만 아니라 중복 레코드가 추가되는 것을 방지 할 수 있도록이를 편집하십시오. – Akaglo

관련 문제