Не удалось преобразовать значение параметра из строки в Int32, пытаясь сделать так, чтобы пользователь мог удалить запись

Я пытаюсь сделать так, чтобы пользователь мог ввести идентификатор записи в текстовое поле, и после нажатия кнопки запись с таким идентификатором удаляется из базы данных, но возникает эта ошибка. Это вопрос изменения текста команды?

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

    con.Open()
    Dim cmd1 As New SqlCommand("DELETEFROM tblInvoices WHERE InvoiceID = @InvoiceID", con)
    cmd1.Parameters.Add("InvoiceID", SqlDbType.Int).Value = TextBox3.Text
    Dim cmd2 As New SqlCommand("DELETE FROM TblMaterials WHERE MaterialID = @MaterialID", con)
    cmd2.Parameters.Add("@MaterialID", SqlDbType.Int).Value = TextBox3.Text
    Dim cmd3 As New SqlCommand("DELETE FROM tblPayments WHERE PaymentID = @PaymentID", con)
    cmd3.Parameters.Add("@PaymentID", SqlDbType.Int).Value = TextBox3.Text
    Dim cmd4 As New SqlCommand("DELETE FROM tblSupplier WHERE SupplierID = @SupplierID", con)
    cmd4.Parameters.Add("SupplierID", SqlDbType.Int).Value = TextBox3.Text
    cmd1.ExecuteNonQuery()
    cmd2.ExecuteNonQuery()
    cmd3.ExecuteNonQuery()
    cmd4.ExecuteNonQuery()
    con.Close()
End Sub

Всего 3 ответа


Может быть, вы хотите попробовать пример ниже, очевидно, вы можете захотеть перехват ошибок купола

cmd4.Parameters.Add ("SupplierID", SqlDbType.Int) .Value = cint (TextBox3.Text)


Вы должны конвертировать String из Text TextBox в Integer , учитывая, что именно так вы указываете тип параметра. Тем не менее, он все равно должен преобразовываться неявно, если String содержит допустимое число. Каково значение TextBox3.Text когда это происходит? Предположительно это не число. Вы должны проверять и преобразовывать пользовательские данные перед их использованием, что вы делали бы, используя Integer.TryParse .


TextBox3.Text является строкой. Вы передаете строку как идентификатор, который является Int32. Вы должны преобразовать его в целое число.

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

    con.Open()
    Dim cmd1 As New SqlCommand("DELETE FROM tblInvoices WHERE InvoiceID = @InvoiceID;DELETE FROM TblMaterials WHERE MaterialID = @MaterialID;DELETE FROM tblPayments WHERE PaymentID = @PaymentID;DELETE FROM tblSupplier WHERE SupplierID = @SupplierID", con)
    cmd1.Parameters.Add("@InvoiceID", SqlDbType.Int).Value = Convert.toInt32(TextBox3.Text)
    cmd1.Parameters.Add("@MaterialID", SqlDbType.Int).Value = Convert.toInt32(TextBox3.Text)
    cmd1.Parameters.Add("@PaymentID", SqlDbType.Int).Value = Convert.toInt32(TextBox3.Text)
    cmd1.Parameters.Add("@SupplierID", SqlDbType.Int).Value = Convert.toInt32(TextBox3.Text)
    cmd1.ExecuteNonQuery()
    con.Close()
End Sub

Есть идеи?

10000