执行LIKE条件时参数化查询中断。为什么?

时间:2009-01-13 21:53:54

标签: sql .net parameters sql-like

所以,我有一个执行参数化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子句的参数化有关。

谢谢!

4 个答案:

答案 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 + '%'