Member 12723543 Ответов: 2

Как мне написать этот запрос на обновление table_items установить количество= (количество-'1') где product_code = '4' в VB.NET


Я хочу использовать этот запрос для вычитания введенного пользователем значения из количества столбцов may Table_Items.

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

Dim Connect As New SqlConnection
        Dim Adapter As New SqlDataAdapter
        Dim Query As String

        Connect = New SqlConnection(ConnectionString)
        Connect.Open()
        Query = "UPDATE Table_Items SET Quantity='"("Quantity - " & Admin.Quantity1.Text & ) "' WHERE Product_code ='" & Admin.LabelProductCode.Text & "'"

        Try
            Adapter.UpdateCommand = New SqlCommand(Query, Connect)
            Adapter.UpdateCommand.ExecuteNonQuery()
            MsgBox("Updated", MsgBoxStyle.Information)
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            ClearEditProdctsFields()


        End Try
        Connect.Close()

[no name]

Если вы используете параметры для вашего запроса, как вы должны использовать, ваша проблема, вероятно, исчезнет.

2 Ответов

Рейтинг:
1

Maciej Los

Не используйте такие команды, где команда представляет собой сцепленную строку! Вместо этого используйте параметризованные запросы.

Query = "UPDATE Table_Items SET Quantity= Quantity - @quantity WHERE Product_code = @productcode"


Для получения более подробной информации, пожалуйста, смотрите:
Коллекции sqlparametercollection.Метод AddWithValue (String, Object) (System. Data.SqlClient)[^]

[РЕДАКТИРОВАТЬ]
Я должен предупредить вас о SqlInjection[^].

Больше:
Как: защита от SQL-инъекций в ASP.NET[^]
Понимание SQL-инъекции-Cisco[^]


Рейтинг:
0

OriginalGriff

Только не так! Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
Попробовать это:

Query="UPDATE Table_Items SET Quantity = (Quantity - @QT) WHERE Product_code = @PC"
Try
    Adapter.UpdateCommand = New SqlCommand(Query, Connect)
    Adapter.UpdateCommand.Parameters.AddWithValue("@QT", Admin.Quantity1.Text)
    Adapter.UpdateCommand.Parameters.AddWithValue("@PC", Admin.LabelProductCode.Text)
    Adapter.UpdateCommand.ExecuteNonQuery()


Member 12723543

Спасибо :)