Sql 执行LIKE条件时,参数化查询中断。为什么?
所以,我有一个方法可以执行类似参数化的查询。该方法接受中的搜索参数/值,然后将其添加到准备查询的命令中 它不起作用。它应该可以工作,当我将要搜索的值直接编码到SQL字符串中时,它确实可以工作!当我把它作为一个参数是不!任何想法 这里有一些假的,我改了名字的示例代码Sql 执行LIKE条件时,参数化查询中断。为什么?,sql,.net,parameters,sql-like,Sql,.net,Parameters,Sql Like,所以,我有一个方法可以执行类似参数化的查询。该方法接受中的搜索参数/值,然后将其添加到准备查询的命令中 它不起作用。它应该可以工作,当我将要搜索的值直接编码到SQL字符串中时,它确实可以工作!当我把它作为一个参数是不!任何想法 这里有一些假的,我改了名字的示例代码 myDataReader = SQLExecute("SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE 'Arrested Development%'") 会有用的。然而
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子句的参数化有关
谢谢 试试这个:
command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE @tvShow + '%'"
尝试将“%”附加到参数字符串的末尾,而不是将其嵌入sql中。@tvShow是一个变量,您正在字符串中使用它。这与C中的相同:
var tvShow = "5th Wheel";
var netwokAndShow = "Fox tvShow";
Console.WriteLine(networkAndShow); // Prints 'Fox tvShow', not 'Fox 5th Wheel'
您希望它看起来像:
LIKE @tvShow + '%'
尝试此操作,以确保要检查的值是varchar值,而不是整数类型:
command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE convert(varchar(100), @tvShow) + '%'"
当T-SQL执行本机类型转换和字符串连接时,我遇到了一些问题
显然,将varchar100更改为在实例中起作用的类型:您的数据类型、预期长度如果您将参数设置为在客户机代码中包含类型信息,则这不是问题。