Параметризованный запрос прерывается при выполнении условия LIKE. Зачем? - PullRequest
0 голосов
/ 14 января 2009

Итак, у меня есть метод, который выполняет параметризованный запрос 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 ]

6 голосов
/ 14 января 2009

Попробуйте это:

command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE @tvShow + '%'"
3 голосов
/ 14 января 2009

Попробуйте добавить '%' в конец строки параметра, а не встраивать его в sql.

1 голос
/ 14 января 2009

Попробуйте, чтобы убедиться, что проверяемое значение является значением varchar, а не целочисленным типом:

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

У меня были некоторые проблемы, когда T-SQL выполняет преобразование собственных типов и конкатенацию строк.

(Очевидно, замените "varchar (100)" на то, что работает в вашем случае: ваши типы данных, ожидаемая длина)

0 голосов
/ 14 января 2009

@tvShow - это переменная, и вы используете ее внутри строки. Это было бы эквивалентно этому в C #:

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

Вы хотите, чтобы это выглядело так:

LIKE @tvShow + '%'
...