Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 执行LIKE条件时,参数化查询中断。为什么?_Sql_.net_Parameters_Sql Like - Fatal编程技术网

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

Sql 执行LIKE条件时,参数化查询中断。为什么?,sql,.net,parameters,sql-like,Sql,.net,Parameters,Sql Like,所以,我有一个方法可以执行类似参数化的查询。该方法接受中的搜索参数/值,然后将其添加到准备查询的命令中 它不起作用。它应该可以工作,当我将要搜索的值直接编码到SQL字符串中时,它确实可以工作!当我把它作为一个参数是不!任何想法 这里有一些假的,我改了名字的示例代码 myDataReader = SQLExecute("SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE 'Arrested Development%'") 会有用的。然而

所以,我有一个方法可以执行类似参数化的查询。该方法接受中的搜索参数/值,然后将其添加到准备查询的命令中

它不起作用。它应该可以工作,当我将要搜索的值直接编码到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子句的参数化有关

谢谢

试试这个:

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更改为在实例中起作用的类型:您的数据类型、预期长度

如果您将参数设置为在客户机代码中包含类型信息,则这不是问题。