sql - SQL Server:将参数布尔值从 vb net 添加到 sql 作为位
问题描述
我有一个 SQL Server 数据库,其中有一个名为tblFeatures
2 列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
当发送的变量是布尔值并且我已经声明了SqlDbType
as 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"
...
使用参数化查询时,如果需要,将放置引号,您不必手动进行,也不应该这样做。
推荐阅读
- laravel - 如何使用 axios vuejs 下载 excel 文件
- python - Python - 任何列表中非负整数的平均值
- postman - 将 informatica 文档转换为 REST API 调用(邮递员)
- python - 使用 Selenium/Python 查找元素时遇到问题
- shell - 将文件的特定列写入另一个文件,谁能给我一个更简洁的解决方案?
- html - HTA - 验证条目
- java - 尝试覆盖方法时发生名称冲突
- r - 为 Mac arm64 安装 Torch for R 时出现问题
- flutter - 如何补间动画文本?从不透明度 =1 到 0 再回到 1
- javascript - 当传递给 JSON.Stringfy() 的对象具有 toJSON() 方法时,过滤器函数如何工作?