0

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

4 回答 4

6

试试这个:

command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE @tvShow + '%'"
于 2009-01-13T21:55:34.267 回答
3

尝试将“%”附加到参数字符串的末尾,而不是将其嵌入到 sql 中。

于 2009-01-13T21:56:29.540 回答
1

试试这个,以确保您检查的值是 varchar 值,而不是整数类型:

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

当 T-SQL 进行本机类型转换和字符串连接时,我遇到了一些问题。

(显然将“varchar(100)”更改为在您的实例中有效的任何内容:您的数据类型,您的预期长度)

于 2009-01-13T22:07:13.637 回答
0

@tvShow是一个变量,您在字符串中使用它。这将相当于 C# 中的 this:

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

你希望它看起来像:

LIKE @tvShow + '%'
于 2009-01-13T22:00:15.943 回答