У меня есть база данных 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()
Это не приводит к ошибке, но значения не обновляются. Пожалуйста, помогите!