SQL Server: добавить параметр логического значения из vb net в sql как бит - PullRequest
0 голосов
/ 20 января 2019

У меня есть база данных SQL Server с таблицей с именем tblFeatures с двумя столбцами Feature (Nvarchar(50)) и Setting (bit). Я пытаюсь установить значение этого Setting для каждого Feature с помощью флажка в VB NET. Я пытался использовать True / False 0/1, но мне не повезло, используя параметры SQL. Я могу сделать это нормально, используя обычную команду SQL Update:

"UPDATE tblSettings SET [Setting]='" & True & "' WHERE Feature='FSCreateTicket'"

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

Вот что я сейчас пытаюсь:

Public Function ChangeSetting(ByVal strFeature As String, ByVal bSetting As Boolean)
    Dim sqlcmd As New SqlCommand
    Try
        MYSQL.Open()
        sqlcmd.Connection = MYSQL
        sqlcmd.CommandText = "UPDATE tblSettings SET Setting='@setting' WHERE Feature='@feature'"
        sqlcmd.Parameters.Add("@setting", SqlDbType.Bit).Value = bSetting
        sqlcmd.Parameters.Add("@feature", SqlDbType.NVarChar, 50).Value = strFeature
        sqlcmd.ExecuteNonQuery()

Я получаю ошибку

Преобразование не удалось при преобразовании значения varchar '@setting' в бит типа данных

Я не понимаю, почему написано varchar, когда переданная переменная является логической, и я объявил SqlDbType как bit.

Я также безуспешно пытался использовать параметр AddwithValue.

Public Function ChangeSetting(ByVal strFeature As String, ByVal bSetting As Boolean)
    Dim sqlcmd As New SqlCommand
    Try
        MYSQL.Open()
        sqlcmd.Connection = MYSQL
        sqlcmd.CommandText = "UPDATE tblSettings SET Setting='@setting' WHERE Feature='@feature'"
        sqlcmd.Parameters.AddWithValue("@setting", bSetting)
        sqlcmd.Parameters.Add("@feature", SqlDbType.NVarChar, 50).Value = strFeature
        sqlcmd.ExecuteNonQuery()

Это не приводит к ошибке, но значения не обновляются. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 20 января 2019

Удалите одинарные кавычки вокруг параметров в тексте запроса, т. Е. Измените

...
sqlcmd.CommandText = "UPDATE tblSettings SET Setting='@setting' WHERE Feature='@feature'"
...

до:

...
sqlcmd.CommandText = "UPDATE tblSettings SET Setting=@setting WHERE Feature=@feature"
...

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

...