2009-01-13 72 views
0

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

谢谢!

回答

6

试试这个:

command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE @tvShow + '%'" 
+0

干杯!我会尝试 – Damien 2009-01-13 22:07:16

3

尝试追加“%”的参数字符串的结尾,而不是在SQL嵌入它。

0

@tvShow是一个变量,你在字符串中使用它。这将是这在C#中的等价物:

var tvShow = "5th Wheel"; 
var netwokAndShow = "Fox tvShow"; 
Console.WriteLine(networkAndShow); // Prints 'Fox tvShow', not 'Fox 5th Wheel' 

你希望它看起来像:

LIKE @tvShow + '%' 
1

试试这个,以确保你正在检查对值是VARCHAR值,而不是说整数类型:

command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE convert(varchar(100), @tvShow) + '%'" 

当T-SQL进行本机类型转换和字符串连接时,我遇到了一些问题。 (显然改变“varchar(100)”是什么在你的实例中工作:你的数据类型,你期望的长度)

+0

如果您设置参数以在客户端代码中包含类型信息,这不是问题。 – 2009-01-13 22:09:27

相关问题