我正在使用Visual Studio 2003和VB.NET语言。我写了像
这样的查询"UPDATE book SET status='confirm' WHERE idnum = '%" & daoi.Text & "%'"
但是数据会更新。当我使用这段代码时
"UPDATE book SET status='confirm' WHERE idnum LIKE '%" & daoi.Text & "%'"
数据已更新。
为什么我不能在声明中使用等于?
答案 0 :(得分:4)
%
字符是SQL中的通配符。在不使用LIKE
但不等于。
您的查询应为"UPDATE book SET status='confirm' WHERE idnum = '" & daoi.Text & "'"
另外:您应该参数化您的查询。 Always think of little bobby tables.
答案 1 :(得分:4)
在你的equals声明中,你有%
的标志。因此,它只会匹配ID中带有%
符号的任何图书ID。
%
是LIKE
语句中的通配符。
答案 2 :(得分:3)
LIKE
和=
不一样,它们是两个不同的运算符。
LIKE
查找部分匹配的字符串 - E.G。
'here is an example' LIKE '%exam%' -- TRUE
=
寻找完全匹配 - E.G。
'here is an example' = '%exam%' -- FALSE
'exam' = 'exam' -- TRUE
答案 3 :(得分:2)
您可以假设daoi.Text
包含您要查找的确切值:
"UPDATE book SET status='confirm' WHERE idnum = '" & daoi.Text & "'"
但请注意,此类查询构建不安全:如果用户(或犯罪者)键入5';DROP TABLE book;--
,则执行相当不同的查询你期待的是什么。这称为SQL注入。
答案 4 :(得分:1)
如果idnum列包含值'A0001',
当您执行第一个查询“WHERE idnum = '%" & daoi.Text & "%'"
”时,这将尝试匹配相等操作,即'A0001'='%A0001%'
,这是不正确的。
当您应用第二个查询“WHERE idnum LIKE '%" & daoi.Text & "%'"
”时,会尝试使用部分匹配来匹配列值和输入数据。我是'A0001'LIKE '%A0001%'
这样就可以了。
如果您想了解有关运营商的更多信息,请参阅MSDN