CaptainChizni Ответов: 2

Я пытаюсь вычесть несколько конкретных строк в базе данных с помощью datagridview


Dim intQty As Integer

          For Each row As DataGridViewRow In Me.DataGridView1.Rows
              Dim intProductID As Integer
              Dim strSQL As String

              If row.Cells(0).Value > 0 Then
                  intProductID = row.Cells(0).Value
                  intQty = row.Cells(3).Value

                  strSQL = "UPDATE Items SET Quantity = Quantity - " & intQty & " WHERE Barcode = " & intProductID

                  Dim cmd_a As OleDbCommand = New OleDbCommand(strSQL, cnn)

                  cmd_a.ExecuteNonQuery()
              End If
          Next row


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

Я получаю ошибку, количество значений запроса и полей назначения не совпадают.
Какой код я буду использовать?

2 Ответов

Рейтинг:
18

Suvendu Shekhar Giri

Прежде всего,
(это очень важно) вы приглашаете хакеров иметь дело с вашим кодом с помощью SQL-инъекции. Не обращай на это внимания, и они попадут в нужное место.

-- Надеюсь, Вы делитесь правильным фрагментом кода
-- Убедитесь, что ваш Barcode это поле int в базе данных. Если нет, заключите значение в пару одинарных кавычек.
-- Заключите вычитание в пару скобок, например (Quantity - " & intQty & ")

Если вы все еще получаете ошибку, пожалуйста, дайте мне знать.
Надеюсь, это поможет :)


CaptainChizni

Это действительно работает, Спасибо :)

Suvendu Shekhar Giri

Рад, что это помогло :)

Рейтинг:
1

Maciej Los

Следуйте инструкциям из документации MSDN: Количество значений запроса и полей назначения не совпадают. (Ошибка 3346) [Ссылка Разработчика Access 2007][^] чтобы решить вашу проблему.

Сувенду Шекхар Гири[^] предупреждал вас о sql-инъекции. Таким образом, вы должны использовать параметризованный запрос вместо сцепленной строки, например:

strSQL = "UPDATE Items SET Quantity = Quantity - @qty WHERE Barcode = @barcode;"
cmd.Parameters.AddWithValue("@qty", intQty)
cmd.Parameters.AddWithValue("@barcode", intProductID)


Не забудьте добавить [;] в конце командной строки! MS Access это очень нравится ;)

Для получения более подробной информации, пожалуйста, смотрите это:
Инструкция UPDATE (Microsoft Access SQL) [Ссылка Разработчика Access 2007][^]
Вставка, обновление и удаление записей из таблицы с помощью Access SQL[^]