首页 > 解决方案 > SQL Server:将参数布尔值从 vb net 添加到 sql 作为位

问题描述

我有一个 SQL Server 数据库,其中有一个名为tblFeatures2 列Feature( Nvarchar(50)) 和Setting( bit) 的表。我正在尝试通过 VB NET 中的复选框Setting为每个设置此值。Feature我尝试过使用 True/False 0/1,但使用 SQL 参数没有运气。我可以使用普通的 SQL 更新命令来做到这一点:

"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当发送的变量是布尔值并且我已经声明了SqlDbTypeas 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()

这不会产生错误,但不会更新值。请帮忙!

标签: sqlbooleansqlparameter

解决方案


删除查询文本中参数周围的单引号 a,即更改

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

到:

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

使用参数化查询时,如果需要,将放置引号,您不必手动进行,也不应该这样做。


推荐阅读