Mohammad Abumoosa Ответов: 1

Вычтите из столбца "устройство" в той же строке SQL (VB.NET)


У меня есть две колонки "серийный номер" и "устройство".пользователь должен записать серийный номер в текстовое поле. если он существует, он вычтет один из устройств. моя проблема заключается в том, что я немного запутался и не знаю, как я могу вычесть (1) из одного и того же серийного номера в текстовом поле.

Try


          Dim query As String = "select serial from verfication where serial=@serial"
          con.Open()
          cmd = New SqlCommand(query, con)
          cmd.Parameters.AddWithValue("@serial", serialtxtbox.Text)
          Dim dr As SqlDataReader
          dr = cmd.ExecuteReader()

          While dr.Read


              MsgBox("user available")
              con.Close()

              Exit Sub
          End While

          MsgBox("wrong serial")
          con.Close()

      Catch ex As Exception
          MsgBox("Please check your internet connection")

      End Try


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

While dr.Read


           dr.Close()

           '  con.Open()
           Dim query1 As String = " Update verfication SET device = device - 1 WHERE serial=@serial"

           cmd = New SqlCommand(query1, con)
           cmd.Parameters.AddWithValue("@serial", serialtxtbox.Text)
           'Dim dr1 As SqlDataReader
           dr = cmd.ExecuteReader()

           MsgBox("user available")


           Exit Sub
           End While



Я получаю эту ошибку от менеджера сервера MySQL

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'DECLARE'.
Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@adminaccess".

Afzaal Ahmad Zeeshan

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

Может быть, попробовать отладить код или что-то еще, или показать полный код, по крайней мере, код, который имеет DECLARE ключевое слово или @adminaccess параметр.

Mohammad Abumoosa

я добавил объявить но ничего не произошло

1 Ответов

Рейтинг:
10

OriginalGriff

Вы не используете DataReader с командой обновления SQL - только с запросами, содержащими инструкцию SELECT.

Вместо этого используйте ExecuteNonQuery:

Dim query1 As String = " Update verfication SET device = device - 1 WHERE serial=@serial"
cmd = New SqlCommand(query1, con)
cmd.Parameters.AddWithValue("@serial", serialtxtbox.Text)
dim affected as Integer = cmd.ExecuteNonQuery()
Значение в affected скажет вам, сколько строк было обновлено. Если он равен нулю, то серийный номер не найден.

Я бы рекомендовал использовать это вместо того, чтобы слепо выдавать одно и то же сообщение пользователю.

Обратите внимание, что MsgBox очень устарел - это "похмелье" от VB6, который умер в 2001 году! Вы должны использовать Класс MessageBox (System.Окна.Формы) | Microsoft Docs[^] вместо этого в наши дни.


Maciej Los

5ed!