Mysql VB.NET中的SQL查询不断给我一个通配符错误
我正在尝试使用VB.NET在我的数据库上执行此SQL查询:Mysql VB.NET中的SQL查询不断给我一个通配符错误,mysql,vb.net,Mysql,Vb.net,我正在尝试使用VB.NET在我的数据库上执行此SQL查询: Dim sql As New MySqlCommand("SELECT * FROM `personer` WHERE epost LIKE %" _ & txbEpost.Text, tilkobling) 问题是它总是出错,我不知道为什么。它一直说“gmail.com”附近有语法错误(考虑到我用txbEpost.Text编写了gmail.com)。但是在我的web界面MySQL中运行完全相同的查询会
Dim sql As New MySqlCommand("SELECT * FROM `personer` WHERE epost LIKE %" _
& txbEpost.Text, tilkobling)
问题是它总是出错,我不知道为什么。它一直说“gmail.com”附近有语法错误(考虑到我用txbEpost.Text编写了gmail.com)。但是在我的web界面MySQL中运行完全相同的查询会产生预期的结果
我做错了什么?代码中的第一个问题是字符串值周围缺少引号
"... WHERE epost LIKE '%" & txbEpost.Text &"'"
但是,这个查询应该使用参数来完成,以避免sql注入和其他解析问题(如果文本框包含一个引号怎么办?)
你好,我觉得应该行
MySqlCommand("SELECT * FROMpersonerWHERE epost LIKE '%" _
& txbEpost.Text & "'", tilkobling)
因为您的sql字符串缺少“.”。报价是必需的这个怎么样:
MySqlCommand(“像“%”一样从PersonerWhere epost中选择*&
txbEpost.Text&“%”,tilkobling)
您应该使用mysqlparameter这对SQL注入是开放的。在回答这类问题时,总是建议参数,并养成自己动手的习惯。Steve的答案显示了doneThanks@Bugs应该是怎样的,如果有,请在这里显示你的答案。没问题。至于回答,通常我会回答,但是我不需要回答,因为史蒂夫已经做得很好了。我也会这样做。如果在类似条件str.Format(“{0}{1}{2}”、“%”、“%”、txbEpost.Text、“%”)之后这样使用,那么提供重复答案是没有意义的。连接字符串可能导致SQL注入。看一看。它可能会被证明是有用的。这对SQL注入是开放的。在回答这类问题时,总是建议参数,并养成自己动手的习惯。史蒂夫的回答说明了应该怎么做。嗯,我试过了,但现在当我尝试填充我的数据表时,它说输入数据的格式不正确。这是代码:当txbEpost.Text等于“gmail.com”时抛出一个错误@Steve是否值得将
%
放在像+'%'+@epost
?当我将MySqlDbType.VarChar
替换为“%”&txbEpost.Text
,并删除.Value
时,效果非常好!谢谢@gloriousCatnip嗯,不清楚你改变了什么。在上面的代码中,Add方法返回一个参数,其值应设置为希望在LIKE表达式中使用的字符串(减去引号)。您能发布您的实际行吗?@Bugs是的,我认为也可以使用该语法,但如果可能,我会尽量避免命令文本中的任何连接。也许这只是一种习惯。
MySqlCommand("SELECT * FROMpersonerWHERE epost LIKE '%" _
& txbEpost.Text & "'", tilkobling)