Member 13779854 Ответов: 2

Sql запрос не обновляет данные


Привет, у меня есть кнопка удаления на VB.NET приложение, которое, когда пользователь нажимает кнопку, должно изменить логическое значение в базе данных на "False". Это почему-то не работает, и я не знаю почему. Это и есть код:

If DataGridViewCustomers.CurrentRow.Cells(1).Value <> Nothing Then


           If CStr(DataGridViewCustomers.CurrentRow.Cells(10).Value.ToString) = "True" Then
               If MsgBox("Delete " + CStr(DataGridViewCustomers.CurrentRow.Cells(1).Value.ToString) + " from customers?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
                   SqlQuery = "UPDATE tblCustomers SET Active = '" & False & "' WHERE CustomerID = '" & DataGridViewCustomers.CurrentRow.Cells(0).Value.ToString & "'"
                   CustomerTable = db.updateData(SqlQuery)
                   DataGridViewCustomers.DataSource = CustomerTable

               End If
           Else
               MsgBox("Customer has already been deleted.")
           End If

       Else
           MsgBox("Please select a customer to delete.")
       End If




Фактический SQL выполняется в модуле функций, которые я сделал для повышения эффективности. Это и есть функция:

Public Function updateData(ByVal SqlQuery As String)
        If conn.State = ConnectionState.Closed Then
            conn.Open()
        End If
        Dim sqlCommand As New OleDbCommand
        With sqlCommand
            .CommandText = SqlQuery
            .Connection = conn
            .ExecuteNonQuery()
        End With

    End Function


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

Я попытался изменить значение True/False на 1/0 и Да/нет. Но ни один из них не сработал.

2 Ответов

Рейтинг:
2

Member 13779854

@Wendelius я действительно попробовал это сделать, и я получаю несоответствие типа данных в ошибке выражения. Похоже, что это должно сработать, но это не так


Maciej Los

Это не ответ. Пожалуйста, удалите его, чтобы избежать голосования вниз!

Рейтинг:
0

Wendelius

Учитывая, что значение в базе данных является логическим, а не строковым, вы должны использовать false для значения, не 'False' Кроме того, убедитесь, что вы используете правильное значение в предложении WHERE.

Я думаю, что лучший способ справиться с этим-использовать Класс OleDbParameter (System.Data.Для oledb)[^]. Таким образом, вы легко убедитесь, что данные обрабатываются с правильными типами данных, и у вас не будет риска SQL-инъекции, см. SQL-инъекция - Википедия[^]


Member 13779854

@Wendelius да, значение в базе данных является логическим. Когда я заменяю False на false, он автоматически меняет его на False. Я совершенно уверен, что правильное значение используется и в предложении Where. Однако я намерен использовать параметры позже в программе.

Wendelius

Не уверен, что я понимаю ваш ответ, но вы пробовали сделать следующее заявление

SqlQuery = "UPDATE tblCustomers SET Active = False WHERE CustomerID = '" & DataGridViewCustomers.CurrentRow.Ячейки(0).Значение.ToString & "'"

Maciej Los

Нет, не так!

SqlQuery = "UPDATE tblCustomers SET Active = False WHERE CustomerID = @CustId"
YourCommad.Parameters.AddWithValues("@CustId", DataGridViewCustomers.CurrentRow.Cells(0).Value)

Maciej Los

5ed!