2012-11-24 4 views
1

누군가 다음 코드를 분석하고 도와 주면 더욱 행복 할 것입니다. 이는 유효성이 검사되는 첫 번째 조건 일 뿐이지 만 staffId가 올바르지 않아도 데이터를 저장할 수 있습니다.저장 버튼을 클릭 할 때 여러 입력의 유효성을 검사하는 방법

Try 
    If rbnMale.Checked = True Then 
     Sex = "M" 
    Else 
     Sex = "F" 
    End If 
    photo = "k" 
    If txtStaffID.Text.Length < 6 Or txtStaffID.Text.Length > 6 Then 
     lblStError.Text = "Please StaffID is not a six-digit integer" 
     lblErrorMsges.Text = "At least one data validation error occured on this form. Please see the specific error messages." 
     If txtName.Text.Length > 25 Then 
      lblNameErr.Text = " Name should not exceed 25 characters" 
      lblErrorMsges.Text = "At least one data validation error occured on this form. Please see the specific error messages." 
       Else 
     qry = "Insert into StaffDetails.Staff(StaffID,EmployeeName,SSN,Day,Month,Year,Sex,Qualifications,Rank,Responsibility,ApDay,ApMonth,ApYear,RegNumber,Phone,Email,Status,Photo)values(@StaffID,@EmployeeName,@SSN,@Day,@Month,@Year,@Sex,@Qualifications,@Rank,@Responsibility,@ApDay,@ApMonth,@ApYear,@RegNumber,@Phone,@Email,@Status,@Photo)" 
     cmd = New SqlCommand(qry, cn) 
     cmd.Parameters.Add(New SqlParameter("@StaffID", Val(txtStaffID.Text))) 
     cmd.Parameters.Add(New SqlParameter("@EmployeeName", txtName.Text)) 
     cmd.Parameters.Add(New SqlParameter("@SSN", txtSsNumber.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Day", cboDay.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Month", cboMonth.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Year", txtYear.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Sex", Sex)) 
     cmd.Parameters.Add(New SqlParameter("@Qualifications", txtQualifications.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Rank", txtRank.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Responsibility", txtRespons.Text)) 
     cmd.Parameters.Add(New SqlParameter("@ApDay", cboApDay.Text)) 
     cmd.Parameters.Add(New SqlParameter("@ApMonth", cboApMonth.Text)) 
     cmd.Parameters.Add(New SqlParameter("@ApYear", txtApYear.Text)) 
     cmd.Parameters.Add(New SqlParameter("@RegNumber", txtRegdNum.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Phone", txtPhone.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Email", txtEmail.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Status", cboStatus.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Photo", img)) 
     cmd.ExecuteNonQuery() 
     MessageBox.Show("Record successfully saved", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information) 
     btnSave.Enabled = False 
    End If 
End If 
    Showgrid() 
Catch ex As Exception 
    MessageBox.Show(ex.Message) 
End Try 

답변

2

문제는 중첩 된 If 문이 있으므로 두 번째 조건을 계속 확인하고 통과해도 여전히 레코드를 저장한다는 것입니다. 오류를 나타 내기 위해 부울 플래그를 사용하여이 작업을 수행합니다. 이 같은

뭔가 :

Dim bError As Boolean 
Try 
    If rbnMale.Checked = True Then 
     Sex = "M" 
    Else 
     Sex = "F" 
    End If 
    photo = "k" 
    If txtStaffID.Text.Length < 6 Or txtStaffID.Text.Length > 6 Then 
     lblStError.Text = "Please StaffID is not a six-digit integer" 
     lblErrorMsges.Text = "At least one data validation error occured on this form. Please see the specific error messages." 
     bError = True 
    End If 

    If txtName.Text.Length > 25 Then 
     lblNameErr.Text = " Name should not exceed 25 characters" 
     lblErrorMsges.Text = "At least one data validation error occured on this form. Please see the specific error messages." 
     bError = True 
    End If 

    If Not bError Then 
     qry = "Insert into StaffDetails.Staff(StaffID,EmployeeName,SSN,Day,Month,Year,Sex,Qualifications,Rank,Responsibility,ApDay,ApMonth,ApYear,RegNumber,Phone,Email,Status,Photo)values(@StaffID,@EmployeeName,@SSN,@Day,@Month,@Year,@Sex,@Qualifications,@Rank,@Responsibility,@ApDay,@ApMonth,@ApYear,@RegNumber,@Phone,@Email,@Status,@Photo)" 
     cmd = New SqlCommand(qry, cn) 
     cmd.Parameters.Add(New SqlParameter("@StaffID", Val(txtStaffID.Text))) 
     cmd.Parameters.Add(New SqlParameter("@EmployeeName", txtName.Text)) 
     cmd.Parameters.Add(New SqlParameter("@SSN", txtSsNumber.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Day", cboDay.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Month", cboMonth.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Year", txtYear.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Sex", Sex)) 
     cmd.Parameters.Add(New SqlParameter("@Qualifications", txtQualifications.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Rank", txtRank.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Responsibility", txtRespons.Text)) 
     cmd.Parameters.Add(New SqlParameter("@ApDay", cboApDay.Text)) 
     cmd.Parameters.Add(New SqlParameter("@ApMonth", cboApMonth.Text)) 
     cmd.Parameters.Add(New SqlParameter("@ApYear", txtApYear.Text)) 
     cmd.Parameters.Add(New SqlParameter("@RegNumber", txtRegdNum.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Phone", txtPhone.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Email", txtEmail.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Status", cboStatus.Text)) 
     cmd.Parameters.Add(New SqlParameter("@Photo", img)) 
     cmd.ExecuteNonQuery() 
     MessageBox.Show("Record successfully saved", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information) 
     btnSave.Enabled = False 
    End If 
    Showgrid() 
Catch ex As Exception 
    MessageBox.Show(ex.Message) 
End Try 
+0

가 Pls는 당신이 정확히 무엇을 의미하는지에 맞게 내 코드를 편집하려고합니다. 미리 감사드립니다. – Akaglo

+0

@Akaglo 방금 했어요 –

+0

정말 고맙습니다. 신의 축복이 있습니다. – Akaglo

관련 문제