我想运行一个带有特殊字符的Sql查询。但是,我不想使用sql参数。有一种方法可以运行以下查询吗?
SqlString := 'Select * from Table1 where Name LIKE '`1234567890-=\]['';/.,<>?:"{}|+_)(*&^%$#@!~%'
FSQLQuery.SQL.Clear;
FSQLQuery.SQL.Add( SqlString );
FSQLQuery.Open;
由于冒号登录,Delphi将此查询视为已参数化 '`1234567890 - =] [' '; /.,& LT;&GT;的:<!/强>“{} | + _)(*&安培; ^%$#@〜%' 并抛出(参数'{} | + _)没有值(*&amp; ^%$#@!〜%')。
答案 0 :(得分:1)
你应该这样做:
sqlString := 'SELECT * FROM Table1 WHERE Name LIKE ''`1234567890-=\]['''';/.,<>?:"{}|+_)(*&^%$#@!~%'' ';
FSQLQuery.ParamCheck := False; //<<It MUST be prior than SetSql.
FSQLQuery.SQL.Clear;
FSQLQuery.SQL.Add( sqlString );
FSQLQuery.Open;
答案 1 :(得分:1)
如果FSQLQuery
是TADOQuery
,那么避免此问题的最简单方法(SQL.Tex
内的冒号字符)就是使用
FSQLQuery.Connection.Execute(FSQLQuery.SQL.Text)
代替FSQLQuery.Open
。
在这种情况下,您可以直接调用ADO方法,而无需Delphi解析您的Sql.Text
。
答案 2 :(得分:0)
注意在SQL中转义字符,也可以使用QuotedStr函数解决工作正常:
sqlString := 'SELECT * FROM Table1 WHERE Name LIKE ' +
QuotedStr('`1234567890-=\]['''';/.,<>?:"{}|+_)(*&^%$#@!~%'' ) + ';';