-1

それぞれに独自のテックスボックスとコンボボックスがある4つのタブページを持つタブコントロールを含むフォームがあり、タブコントロールの外側にボタンがあり、これらのボックスに入力されたすべての値からSQL文字列を作成します。問題は、ボタンを押すとnull参照例外が発生し、 Try..Catchを使用したり、次にエラーを再開したりしても、コンパイラがテキスト文字列の作成を拒否することです。ここに私が持っているコードがあります:

Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)     Handles btnUpdate.Click
    If Me.BankGuidTextBox.Text = vbNullString Then
        Me.BankGuidTextBox.Text = Guid.Empty.ToString
    End If
    If Me.BankNumTextBox.Text = vbNullString Then
        Me.BankNumTextBox.Text = 0
    End If
    If Me.NameTextBox.Text = vbNullString Or Me.CodeTextBox.Text = vbNullString Then
        GoTo outofsub
    End If
    Try
        Dim strSQL3 As String
        strSQL3 = "USE MSILHR" & vbCrLf & _
            "UPDATE employee SET Code = '" & Me.CodeTextBox.Text & "', Name = '" &  Me.NameTextBox.Text & "', Latinname = '" & Me.LatinNameTextBox.Text & "', Barcode = '" & Me.BarcodeTextBox.Text & "', FirstName = '" & Me.FirstNameTextBox.Text & "', LastName = '" & Me.LastNameTextBox.Text & "', idFather = '" & Me.IdFatherTextBox.Text & "', idMother = '" & Me.IdMotherTextBox.Text & "', idBirthDate = '" & Me.IdBirthDateDateTimePicker.Text & "', idBirthplace = '" & Me.IdBirthPlaceTextBox.Text & "', idSex = '" & Me.IdSexComboBox.SelectedValue & "', idMaritalstat = '" & Me.IdMaritalstatComboBox.SelectedValue & "', idSmoker = '" & Me.IdSmokerComboBox.SelectedValue & "', idMilitary = '" & Me.IdMilitaryComboBox.SelectedValue & "', idRegistry = '" & Me.IdRegistryTextBox.Text & "', idNum = '" & Me.IdNumTextBox.Text & "', idAddress = '" & Me.IdAddressTextBox.Text & "', idNationality = '" & Me.IdNationalityTextBox.Text & "', idReligion = '" & Me.IdReligionComboBox.SelectedItem & "', idTel = '" & Me.IdTelTextBox.Text & "', idMobile = '" & Me.IdMobileTextBox.Text & "', idNotes = '" & Me.IdNotesTextBox.Text & "', jStartDate = '" & Me.JStartDateDateTimePicker.Text & "', jQuitDate = '" & Me.JQuitDateDateTimePicker.Text & "', jQuitReason = '" & Me.JQuitReasonTextBox.Text & "', jSocialSec = '" & Me.JSocialSecTextBox.Text & "', jSocialdin = '" & Me.JSocialdinDateTimePicker.Text & "', jSocialdout = '" & Me.JSocialdoutDateTimePicker.Text & "', jHoliday1 = '" & Me.JHoliday1ComboBox.SelectedValue & "', jHoliday2 = '" & Me.JHoliday2ComboBox.SelectedValue & "', jEmpStat = '" & Me.JEmpStatComboBox.SelectedValue & "', jEmail = '" & Me.JEmailTextBox.Text & "', jPrevvacs = '" & Me.JPrevvacsTextBox.Text & "', jAdminvacs = '" & Me.JAdminvacsTextBox.Text & "', jHealthvacs = '" & Me.JHealthvacsTextBox.Text & "', jUnpaidvacs = '" & Me.JUnpaidvacsTextBox.Text & "', DepartmentGuid = '" & Me.DepartmentGuidComboBox.SelectedValue.ToString & "', JobTitleGuid = '" & Me.JobTitleGuidComboBox.SelectedValue.ToString & "',SalarycalctypeGuid = '" & Me.SalarycalctypeGuidComboBox.SelectedValue.ToString & "', TeamGuid = '" & Me.TeamGuidComboBox.SelectedValue.ToString & "', WorkDays = '" & Me.WorkDaysTextBox.Text & "', DaHours = '" & Me.DaHoursTextBox.Text & "', OverTimeHourPrice = '" & Me.OverTimeHourPriceTextBox.Text & "', CutSalary = '" & Me.CutSalaryTextBox.Text & "',BasicSalary = '" & Me.BasicSalaryTextBox.Text & "', SpecialSalary = '" & Me.SpecialSalaryTextBox.Text & "',CurrencyGuid = '" & Me.CurrencyGuidComboBox.SelectedValue.ToString & "', BankGuid = '" & Me.BankGuidTextBox.Text & "', BankNum = '" & Me.BankNumTextBox.Text & "', PeriodGUID = '" & Me.EmpperiodCombo.SelectedValue.ToString & "'" & vbCrLf & _
            "WHERE GUID = '" & Me.GUIDTextBox.Text & "'"

        '"update employee set Picturepath = (select name from types where type = '660')+'\" & Me.NameTextBox.Text & "' where code = '" & Me.CodeTextBox.Text & "' AND Name = '" & Me.NameTextBox.Text & "'"
        Dim dbConnection As New SqlConnection(connectionString)
        ' A SqlCommand object is used to execute the SQL commands.
        Dim cmd As New SqlCommand(strSQL3, dbConnection)

        ' Open the connection, execute the command, and close the connection.
        ' It is more efficient to ExecuteNonQuery when data is not being 
        ' returned.
        dbConnection.Open()
        cmd.ExecuteNonQuery()
        dbConnection.Close()

        MessageBox.Show("Record is updated.", _
            "Data Addition Status", _
            MessageBoxButtons.OK, MessageBoxIcon.Information)

    Catch sqlExc As SqlException
        MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
            MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
    'Me.EmployeeTableAdapter.Fill(Me.MSILHRDataset.employee)

    ResetUI()
outofsub:
    MsgBox("you need to add more information!", MsgBoxStyle.Information, "Error")
End Sub

OK 新しい更新: いくつかのデータを入力して、いくつかのテキスト ボックスを空のままにしましたが、すべてのコンボ ボックスで値が選択されていることを確認してから updatebutton を押しまし。他の 4 つ) し、前のタブに戻って、ボタンを押すと、IT WORKS !!?? フォーカスが変更されるまで、フォームがユーザーが入力した値をコミットしないかのようです。

4

1 に答える 1

1

あなたはSqlExceptionをキャッチしているだけです。
一般的な例外もキャッチする必要があります。

Catch sqlExc As SqlException
    MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
        MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch exc As Exception
  MessageBox.Show(exc.ToString, "General Exception Error!", _
        MessageBoxButtons.OK, MessageBoxIcon.Error)

null 例外が発生する理由がわかりません。
しかし、これは SqlException ではないため、キャッチされません。
その文字列を分解して、壊れている場所を確認します。
表面的には、うまくいくように見えます。
コントロールの 1 つが string.empty ではなく null を返していると思われます。

于 2012-11-23T15:24:49.240 に答える