所以,我有一个执行参数化LIKE查询的方法。该方法接受搜索参数/值,然后将其添加到准备查询的命令中。
它不起作用。它应该工作,当我编写值来直接搜索SQL字符串,没有参数化时,它确实有效!当我把它作为一个参数是不是!任何想法。
这里有一些(假的,我已更改名称)示例代码。
myDataReader = SQLExecute("SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE 'Arrested Development%'")
会工作吗?然而
Function MethodOfReturningHorror(ByVal TVShow as String) as SqlDataReader
{
dim command as new SQLCommand
command.connection = sqlconnection
command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE '@tvShow%'"
command.Parameters.Add("tvShow",TVShow)
return command.ExecuteReader()
}
为了懒惰/简洁,我错过了与问题无关的代码。所以忽略返回位和东西,所有重要的是数据读取器什么都不包含,而它在第一个例子中。我确信它与LIKE子句的参数化有关。
谢谢!
答案 0 :(得分:6)
试试这个:
command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE @tvShow + '%'"
答案 1 :(得分:3)
尝试将'%'附加到参数字符串的末尾,而不是将其嵌入到sql中。
答案 2 :(得分:1)
尝试这样做,以确保您要检查的值是varchar值,而不是整数类型:
command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE convert(varchar(100), @tvShow) + '%'"
当T-SQL执行本机类型转换和字符串连接时,我遇到了一些问题。
(显然将“varchar(100)”更改为您实例中的任何内容:您的数据类型,预期长度)
答案 3 :(得分:0)
@tvShow
是一个变量,你在字符串中使用它。它将与C#中的相同:
var tvShow = "5th Wheel";
var netwokAndShow = "Fox tvShow";
Console.WriteLine(networkAndShow); // Prints 'Fox tvShow', not 'Fox 5th Wheel'
你希望它看起来像:
LIKE @tvShow + '%'