Member 13124507 Ответов: 2

Несоответствие типов данных в выражении критериев в VB.NET ..?


всякий раз, когда я запускаю форму, я получаю ошибку " несоответствие типа данных в выражении критериев"

Что я уже пробовал:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim a As Integer
        a = EMI_AmountTextBox.Text
        Dim b As Integer
        b = Late_Fine_ChargeTextBox.Text

        Total_AmountTextBox.Text = a + b 'Late_Fine_ChargeTextBox.Text + EMI_AmountTextBox.Text

        provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
        datafile = "C:\asp.net\Loan Management System\Database\Receive_emi.mdb"
        connString = provider & datafile
        myConnection.ConnectionString = connString
        myConnection.Open()
        Dim str As String
        str = "Insert into Receive_emi([C_ID],[ReceiptNo],[No_of_payment],[Receipt_Date],[EMI__Date],[EMI_Amount],[Late_Fine_Charge],[Total_Amount])values(?,?,?,?,?,?,?,?)"
        Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)

        cmd.Parameters.Add(New OleDbParameter("C_ID", CType(C_IDTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("ReceiptNo", CType(ReceiptNoTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("No_of_payment", CType(No_of_paymentTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Receipt_Date", CType(Receipt_DateDateTimePicker.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("EMI__Date", CType(EMI__DateDateTimePicker.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("EMI_Amount", CType(EMI_AmountTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Late_Fine_Charge", CType(Late_Fine_ChargeTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Total_Amount", CType(Total_AmountTextBox.Text, String)))
        Try
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            myConnection.Close()
            Me.Hide()

            User_Home_page.Show()


        Catch ex As Exception

            MsgBox(ex.Message)
       End Try

    End Sub

CHill60

В какой строке кода?
И почему вы преобразуете текст в строку, когда он уже является строкой?

2 Ответов

Рейтинг:
2

CHill60

Хорошо.. Я думаю, что это то, как вы управляете своими параметрами. Попробуйте вместо этого:

cmd.Parameters.AddWithValue("C_ID", C_IDTextBox.Text)
cmd.Parameters.AddWithValue("ReceiptNo", ReceiptNoTextBox.Text)
cmd.Parameters.AddWithValue("No_of_payment", No_of_paymentTextBox.Text)
cmd.Parameters.AddWithValue("Receipt_Date", Receipt_DateDateTimePicker.Value)
cmd.Parameters.AddWithValue("EMI__Date", EMI__DateDateTimePicker.Value)
cmd.Parameters.AddWithValue("EMI_Amount", EMI_AmountTextBox.Text)
cmd.Parameters.AddWithValue("Late_Fine_Charge", Late_Fine_ChargeTextBox.Text)
cmd.Parameters.AddWithValue("Total_Amount", Total_AmountTextBox.Text)


Ralf Meier

Я не уверен, что ваш подход верен.
Обычно (необязательное) преобразование из строки в строку не приводит к ошибке ...

CHill60

В своем решении я выступаю за использование AddWithValue, а не просто Add. Комментарий о ненужном преобразовании был в более раннем...э-э ... комментарии

Ralf Meier

Извините... вы правы... Я этого не понимал :(

ZurdoDev

+5. Гораздо проще код. Менее подвержены ошибкам.

Рейтинг:
0

Ralf Meier

Мое намерение таково :

Dim a As Integer = cint(EMI_AmountTextBox.Text)
Dim b As Integer = cint(Late_Fine_ChargeTextBox.Text)

Total_AmountTextBox.Text = (a + b).toString   'Late_Fine_ChargeTextBox.Text + EMI_AmountTextBox.Text


ZurdoDev

Является ли это решением вопроса? Он не похож ни на один.

Ralf Meier

Нет... это (я думаю) решение.
Мне очень жаль, если вы поняли это как вопрос ...

ZurdoDev

Это не похоже на решение вопроса, который был задан.

Ralf Meier

Конечно... это :
Вы не можете назначить добавление 2 целых чисел к строке (- переменной) без преобразования.

Поскольку у меня нет всего исходного кода, я не могу проверить, действительно ли cmd. Parameters принимает строки или что-то совершенно другое ...

ZurdoDev

Метод tryparse бы лучше, на мой взгляд.

Ralf Meier

конечно... потому что он проверяет, возможно ли само преобразование ...
CINT был самым простым способом (и лучше, чем преобразование implizit) ...

CHill60

Однако это не вызвало бы исключения, о котором сообщила ОП

Ralf Meier

Я не уверен (как я уже обсуждал с Ряндевым).
Возможно также, что одно из добавлений не требует строки ...
Но у нас нет ответа от ОП ...

Ralf Meier

..- но вы правы ... это зависит от настроек компиляции проекта ...