VB.NET cmd.CommandText неправильно работает с обновлением sql

#sql #vb.net

Вопрос:

Это моя кнопка вычитания, она просто вычитает количество в моей базе данных, но математическая логика неверна, например, если я сказал 12-2, она обновляет количество до 6

     If con.State = ConnectionState.Open Then
        con.Close()

    End If
    con.Open()


    Try
        If con.State = ConnectionState.Open Then
            con.Close()

        End If

        con.Open()

        cmd = con.CreateCommand()
        cmd.CommandType = CommandType.Text


        cmd.CommandText = "UPDATE tablekongbago SET qty = qty   2 WHERE Id = 2"
        cmd.CommandType = "UPDATE tablekongbago SET qty = (qty - 2) WHERE Id = 2"
        cmd.CommandText = "update tablekongbago set qty = qty - "   Convert.ToInt32(qtybox1.Text)   "WHERE Id = 2"
        cmd.CommandText = "UPDATE tablekongbago SET qty = qty - 2 WHERE Id = " amp; 2 amp; ""
        cmd.CommandText = "UPDATE tablekongbago SET qty = qty - "   Convert.ToInt32(2)   " WHERE Id = 2"
 

Любой из этих 5 «cmd.CommandText работает неправильно, он добавляет и вычитает, но количество, которое он обновляет в базе данных, неверно, он выдает неправильный вывод, например (12 — 2 = 6)

         cmd.ExecuteNonQuery()
        Dim dt As New DataTable()
        Dim da As New SqlDataAdapter(cmd)

        da.Fill(dt)
        Dim dr As SqlClient.SqlDataReader
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
        While dr.Read

            qty = dr.GetInt32(3).ToString()




        End While

    Catch ex As Exception

    End Try

    MessageBox.Show("Subtracted Successfully")
 

Комментарии:

1. Каков ваш сервер sql (MySQL, Oracle, Sql Server и т.д.) ? Обратите внимание, что выводом инструкции SQL UPDATE DML является количество обновленных записей, а не ваше количество .

2. Я использую базу данных mdf MySQL в visual studio, используя cmd. CommandText = «», Я хочу изменить кол-во, «ОБНОВИТЬ набор таблиц кол-ВО = 12, ГДЕ Id = 2» работает, но «ОБНОВИТЬ набор таблиц кол-во = кол-во -2, ГДЕ Id =2» нет, мое кол-во равно 12, но всякий раз, когда я использую «ОБНОВИТЬ набор таблиц кол-во = кол-во -2, ГДЕ Id =2», кол-во меняется на 6.

3. В случае, можете ли вы проверить, есть ли какие-либо триггеры (особенно UPDATE один) table ?

4. «Я использую базу данных mdf MySQL» . А? Нет, это не так. Если вы используете файл данных MDF, то это SQL Server, а не MySQL. Если SqlClient поставщик вообще работает, то вы должны использовать SQL Server.

Ответ №1:

Сначала вы вызываете ExecuteNonQuery команду, которая вычитает 2 из текущего значения. Затем вы создаете адаптер данных с той же командой в нем SelectCommand , а затем вызываете Fill , который снова выполнит ту же команду и вычтет еще 2. Наконец, вы снова вызываете ExecuteReader ту же команду, которая вычтет еще 2. Скажите мне, что такое (12 — 2 — 2 — 2)? Команда работает именно так, как должна. Вы просто выполняете два дополнительных раза без всякой причины.

Зачем вам вообще использовать адаптер данных и устройство чтения данных в такой ситуации? Нигде нет SELECT оператора, и оба Fill и ExecuteReader предназначены для выполнения запросов, т. е. SELECT операторов.

Комментарии:

1. Большое вам спасибо, теперь это работает правильно, я только что прокомментировал это, я действительно не понимаю ту часть кода, которую вы сказали, я просто скопировал этот код из своей функции datagridview