я получаю сообщение об ошибке: входная строка была неправильный формат с этим кодом - PullRequest
0 голосов
/ 19 апреля 2020
Private Sub ButtonComSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonComSave.Click
    Dim ComNamDis As String
    Dim ComPro1 As String
    Dim ComPro2 As String
    Dim ComPro3 As String
    Dim msg As MsgBoxResult

    If ButtonComSave.Text = "Save" Then
        ComNamDis = "Insert Into ComNamDis (Com_Code, Com_Name, Com_Discreption) Values(@Com_Code, @Com_Name, @Com_Discreption)"
        ComPro1 = "Insert Into ComPro (Com_Code, ComTyp, PriCat_Code, SubCat_Code, StoUni_Code, CalTyp_Code, CosTyp_Code, MiniW, MiniD, MiniH, MiniU, MiniQ, Local_Cost, "
        ComPro2 = "Last_Cost, Profit_Margin, Price) Values(@Com_Code, @ComTyp, @PriCat_Code, @SubCat_Code, @StoUni_Code, @CalTyp_Code, @CosTyp_Code, @MiniW, @MiniD, @MiniH, "
        ComPro3 = "@MiniU, @MiniQ, @Local_Cost, @Last_Cost, @Profit_Margin, @Price)"

        msg = MsgBox("You are sure to save this component ?", MsgBoxStyle.YesNo, "Confirm")
    Else
        ComNamDis = "Update ComNamDis set Com_Code = @Com_Code, Com_Name = @Com_Name, Com_Discreption = @Com_Discreption Where Com_Code = '" & txtComCod.Text & "'"
        ComPro1 = "Update ComPro set Com_Code = @Com_Code, ComTyp = @ComTyp, PriCat_Code = @PriCat_Code, SubCat_Code = @SubCat_Code, StoUni_Code = @StoUni_Code, "
        ComPro2 = "CalTyp_Code = @CalTyp_Code, CosTyp_Code = @CosTyp_Code, MiniW = @MiniW, MiniD = @MiniD, MiniH = @MiniH, MiniU = @MiniU, MiniQ = @MiniQ, "
        ComPro3 = "Local_Cost = @Local_Cost, Last_Cost = @Last_Cost, Profit_Margin = @Profit_Margin, Price = @Price Where Com_Code = '" & txtComCod.Text & "'"

        msg = MsgBox("You are sure to edit this component ?", MsgBoxStyle.YesNo, "Confirm")
    End If

    If msg = MsgBoxResult.Yes Then

        Try
            Dim cmdComNamDis As New OleDbCommand(ComNamDis, Conn)

            cmdComNamDis.Parameters.Add(New OleDbParameter("@Com_Code", OleDbType.VarChar)).Value = txtComCod.Text
            cmdComNamDis.Parameters.Add(New OleDbParameter("@Com_Name", OleDbType.VarChar)).Value = txtComNam.Text
            cmdComNamDis.Parameters.Add(New OleDbParameter("@Com_Discreption", OleDbType.VarChar)).Value = txtComDis.Text

            Conn.Open()
            cmdComNamDis.ExecuteNonQuery()

            Dim cmdCompro As New OleDbCommand(ComPro1 & ComPro2 & ComPro3, Conn)

            cmdCompro.Parameters.Add(New OleDbParameter("@Com_Code", OleDbType.VarChar)).Value = txtComCod.Text
            cmdCompro.Parameters.Add(New OleDbParameter("@ComTyp", OleDbType.VarChar)).Value = ComboBoxComTyp.Text
            cmdCompro.Parameters.Add(New OleDbParameter("@PriCat_Code", OleDbType.VarChar)).Value = ComboBoxPriCat.ValueMember
            cmdCompro.Parameters.Add(New OleDbParameter("@SubCat_Code", OleDbType.VarChar)).Value = ComboBoxSubCat.ValueMember
            cmdCompro.Parameters.Add(New OleDbParameter("@StoUni_Code", OleDbType.VarChar)).Value = ComboBoxComStoUni.ValueMember
            cmdCompro.Parameters.Add(New OleDbParameter("@CalTyp_Code", OleDbType.VarChar)).Value = ComboBoxComCalcolation.ValueMember
            cmdCompro.Parameters.Add(New OleDbParameter("@CosTyp_Code", OleDbType.VarChar)).Value = ComboBoxComCostTyp.ValueMember

'i think here it's Problem
            cmdCompro.Parameters.Add(New OleDbParameter("@MiniW", OleDbType.Decimal)).Value = Convert.ToDecimal(txtComMiniW.Text)
            cmdCompro.Parameters.Add(New OleDbParameter("@MiniD", OleDbType.Decimal)).Value = Convert.ToDecimal(txtComMiniD.Text)
            cmdCompro.Parameters.Add(New OleDbParameter("@MiniH", OleDbType.Decimal)).Value = Convert.ToDecimal(txtComMiniH.Text)
            cmdCompro.Parameters.Add(New OleDbParameter("@MiniU", OleDbType.Decimal)).Value = Convert.ToDecimal(txtComMiniU.Text)
            cmdCompro.Parameters.Add(New OleDbParameter("@MiniQ", OleDbType.Decimal)).Value = Convert.ToDecimal(txtComMiniQ.Text)
            cmdCompro.Parameters.Add(New OleDbParameter("@Local_Cost", OleDbType.Decimal)).Value = Convert.ToDecimal(txtComLocalCost.Text)
            cmdCompro.Parameters.Add(New OleDbParameter("@Last_Cost", OleDbType.Decimal)).Value = Convert.ToDecimal(txtComLastCost.Text)
            cmdCompro.Parameters.Add(New OleDbParameter("@Profit_Margin", OleDbType.Decimal)).Value = Convert.ToDecimal(txtComProfitMargin.Text)
            cmdCompro.Parameters.Add(New OleDbParameter("@Price", OleDbType.Decimal)).Value = Convert.ToDecimal(txtComPrice.Text)

            cmdCompro.ExecuteNonQuery()

            If ButtonComSave.Text = "Save" Then
                MsgBox("The component has been saved successfully :) ", MsgBoxStyle.Information, "Confirm")
            Else
                MsgBox("The component has been Edited successfully :) ", MsgBoxStyle.Information, "Confirm")
            End If

            ButtonComNew_Click(sender, e)

        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            Conn.Close()
        End Try
    Else
        Exit Sub
    End If
End Sub

1 Ответ

0 голосов
/ 20 апреля 2020

Соединения и команды должны быть закрыты и утилизированы. Держите ваши объекты соединения локально для метода, где используется соединение. Затем вы можете использовать блоки Using...End Using для закрытия, утилизации.

Ваша проверка может быть выполнена в Проверочном событии TextBox и использовать ErrProvider. Если вы хотите сделать это здесь, в Button.Click, сделайте это в начале подпункта.

Dim ComMiniW As Decimal
If Not Decimal.TryParse(txtComMiniW.Text, ComMiniW) Then
    MessageBox.Show("ComMinW must be a valid number")
    Exit Sub
End If

В нижней части параметров используется преобразованная десятичная переменная.

cmdCompro.Parameters.Add(New OleDbParameter("@MiniW", OleDbType.Decimal)).Value = ComMiniW

Сделайте это для каждого из текстовых полей, для которых требуются десятичные значения.

...