Visual Basic: проблемы обработки исключений TRY \ CATCH - PullRequest
0 голосов
/ 18 октября 2018

Я работаю с базой данных сотрудников и у меня возникают проблемы с моим TRY \ CATCH для сохранения записей, так как это относится к обработке исключений.Проблема, с которой я сталкиваюсь, заключается в том, что он запустит TRY и проигнорирует CATCH, что позволит передавать недопустимые данные и сохранять их в файл.Я очень плохо знаком с Visual Basic и не уверен, почему это не работает.Вот мой код для формы:

Option Strict Off
Imports System.IO

Public Class frmEmployeeData
'Variable Declarations
Dim BlnisChanged As Boolean = False
Dim empFirstName As String
Dim empMiddleName As String
Dim empLastName As String
Dim empNumber As Integer
Dim empDepartment As String
Dim empTelephone As String
Dim empExtension As Integer
Dim empEmailAddress As String
Dim empSelection As String
Dim fileName As String
Dim intTryParse As Integer = 0



Private Sub frmEmployeeData_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'Adds the department options to the combo box dropdown list
    ComboBoxEmpDepartment.Items.Add("Accounting")
    ComboBoxEmpDepartment.Items.Add("Administration")
    ComboBoxEmpDepartment.Items.Add("Marketing")
    ComboBoxEmpDepartment.Items.Add("MIS")
    ComboBoxEmpDepartment.Items.Add("Sales")
End Sub

Sub ClearItems()
    'Clears text boxes
    txtFirstName.Clear()
    txtMiddleName.Clear()
    txtLastName.Clear()
    txtEmployeeNumber.Clear()
    ComboBoxEmpDepartment.ResetText()
    txtTelephone.Clear()
    txtExtension.Clear()
    txtEmailAddress.Clear()
End Sub

Sub SaveItems()
    Dim savedEmployeeFile As StreamWriter

    Try
        'Creates the employee file
        savedEmployeeFile = File.CreateText(fileName)

        'writes information entered by user into file
        savedEmployeeFile.WriteLine(txtFirstName.Text)
        savedEmployeeFile.WriteLine(txtMiddleName.Text)
        savedEmployeeFile.WriteLine(txtLastName.Text)
        savedEmployeeFile.WriteLine(txtEmployeeNumber.Text)
        savedEmployeeFile.WriteLine(ComboBoxEmpDepartment.Text)
        savedEmployeeFile.WriteLine(txtTelephone.Text)
        savedEmployeeFile.WriteLine(txtExtension.Text)
        savedEmployeeFile.WriteLine(txtEmailAddress.Text)

        'Closes the file
        savedEmployeeFile.Close()

        BlnisChanged = False

        'Clears the text boxes
        ClearItems()

    Catch ex As Exception
        'Throws error if file could Not be created
        MessageBox.Show("Unable To Create File. Please Try Again", "Error In Saving")

    End Try
End Sub
Sub AppendToFile()
    Dim savedEmployeeFile As StreamWriter

    Try
        'append to file
        savedEmployeeFile = File.AppendText(fileName)

        'writes information entered by user into file
        savedEmployeeFile.WriteLine(txtFirstName.Text)
        savedEmployeeFile.WriteLine(txtMiddleName.Text)
        savedEmployeeFile.WriteLine(txtLastName.Text)
        savedEmployeeFile.WriteLine(txtEmployeeNumber.Text)
        savedEmployeeFile.WriteLine(ComboBoxEmpDepartment.Text)
        savedEmployeeFile.WriteLine(txtTelephone.Text)
        savedEmployeeFile.WriteLine(txtExtension.Text)
        savedEmployeeFile.WriteLine(txtEmailAddress.Text)

        MessageBox.Show("Employee saved successfully.", "Success")

        'Closes the file
        savedEmployeeFile.Close()


        BlnisChanged = False

        'Clears the text boxes
        ClearItems()
    Catch ex As Exception
        MessageBox.Show("No file exists. Please select 'Save As' Option.", "Error In Saving")
    End Try
End Sub

Private Sub btnSaveRecord_Click(sender As Object, e As EventArgs) Handles btnSaveRecord.Click
    Dim savedEmployeeFile As StreamWriter

    'EXCEPTION HANDLING
    'verifies first name field content
    If txtFirstName.Text = "" Then
        MessageBox.Show("First name cannot be blank", "Invalid Entry")
    End If
    'verifies middle name field content
    If txtMiddleName.Text = "" Then
        MessageBox.Show("Middle name cannot be blank", "Invalid Entry")
    End If
    'verifies last name field content
    If txtLastName.Text = "" Then
        MessageBox.Show("Last name cannot be blank", "Invalid Entry")
    End If
    'verifies employee number field content
    If txtEmployeeNumber.Text = "" Then
        MessageBox.Show("Employee number cannot be blank", "Invalid Entry")
    ElseIf Not (Integer.TryParse(txtEmployeeNumber.Text, intTryParse)) Then
        MessageBox.Show("Employee number must be numeric", "Invalid Entry")
    ElseIf CStr(txtEmployeeNumber.Text) < 0 Then
        MessageBox.Show("Employee number must be positive", "Invalid Entry")
    End If
    'verifies department field content
    If ComboBoxEmpDepartment.Text = "" Then
        MessageBox.Show("Employee department cannot be blank", "Invalid Entry")
    End If
    'verifies telephone number field content
    If txtTelephone.Text = "" Then
        MessageBox.Show("Telephone number cannot be blank", "Invalid Entry")
    ElseIf Not (Integer.TryParse(txtEmployeeNumber.Text, intTryParse)) Then
        MessageBox.Show("Telephone number must be numeric", "Invalid Entry")
    End If
    'verifies extension field content
    If txtExtension.Text = "" Then
        MessageBox.Show("Extension cannot be blank", "Invalid Entry")
    ElseIf Not (Integer.TryParse(txtExtension.Text, intTryParse)) Then
        MessageBox.Show("Extension must be numeric", "Invalid Entry")
    ElseIf CInt(txtExtension.Text) < 0 Then
        MessageBox.Show("Extension must be positive", "Invalid Entry")
    End If
    'verifies email address field content
    If txtEmailAddress.Text = "" Then
        MessageBox.Show("Email Address cannot be blank", "Invalid Entry")
    End If


    'If no filename exists, will prompt save dialog box and prompt user to save as
    If fileName = String.Empty Then
        If sfdSave.ShowDialog = System.Windows.Forms.DialogResult.OK Then
            fileName = sfdSave.FileName
            SaveItems()
        End If

        'If filename exists, append item to file
    Else
        AppendToFile()
    End If
End Sub

Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
    'Clears all content currently within text boxes
    txtFirstName.Clear()
    txtMiddleName.Clear()
    txtLastName.Clear()
    txtEmployeeNumber.Clear()
    ComboBoxEmpDepartment.ResetText()
    txtTelephone.Clear()
    txtExtension.Clear()
    txtEmailAddress.Clear()

End Sub

Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
    'Closes Program
    frmUserSelection.Show()
    Me.Visible = False
End Sub

Private Sub SaveFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles sfdSave.FileOk

End Sub

Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
    'Picture Obtained From:
    '"User Add Icon-Shine Set: Add New User, Add User." Free Icons PNG. Accessed 14 October 2018. https://www.freeiconspng.com/img/2487
End Sub
End Class

1 Ответ

0 голосов
/ 18 октября 2018
Блок

A Catch выполняется только в том случае, если исключение выдается из блока Try.Я не вижу здесь ничего, что могло бы вызвать это.Похоже, что вы немного неправильно поняли это.

Не помещайте проверку логику в блок Catch.Все, что должно идти, - это код для обработки исключения , если оно произошло.Например, если соединение с базой данных не удается из-за того, что сама база данных находится в автономном режиме, или если запись в файл не удается из-за невозможности найти / открыть файл.

Поставьте проверку логика, прежде чем даже попытаться сохранить его.Если пользовательский ввод не проходит проверку, не пытайтесь его сохранить.Вместо этого верните ошибку пользователю.Только если ваша пользовательская проверка пройдет , вы начнете Try, запишете в свое хранилище данных и обработаете исключение, если оно произойдет.

...