SQL 服务器:将 vb 网络中的参数布尔值添加到 sql 中作为位

SQL Server : add parameter boolean from vb net into sql as bit

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

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

但是,我想使用 SQL 参数以 proper/safe 的方式进行。我搜索了 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()

我遇到错误

Conversion failed when converting the varchar value '@setting' to data type bit

我不明白为什么它说 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()

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

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

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

至:

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

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