Как передать % как часть параметра в SqlCommand?

При использовании SqlDataSource это делается так:

SqlDataSource1.SelectCommand = "SELECT field,field FROM TABLE WHERE name LIKE @name"
SqlDataSource1.SelectParameters.Clear()
SqlDataSource1.SelectParameters.Add( _
            New Parameter("name", DbType.String, "%" + TextBox1.Text + "%"))

Но если я попытаюсь:

command.Parameters.Add( _
    New Parameter("name", SqlDbType.VarChar, "%" + TextBox1.Text + "%"))

or

command.Parameters.Add(New Parameter("name", DbType.String, "%" + TextBox1.Text + "%"))

это терпит неудачу. Как это сделать с SqlCommand?


person phalanx    schedule 12.09.2013    source источник


Ответы (2)


Попробуйте добавить параметры другим способом

Command.Parameters.Add("@Name", SqlDbType.VarChar).Value = "%" & TextBox1.Text & "%"

Кроме того, чтобы не вызывать проблем, попробуйте использовать & вместо +. Не то чтобы я мог быть уверен, что% считается числом или аритмическим состоянием, но, похоже, это объясняется net">Вот, ну.

person Don Thomas Boyle    schedule 12.09.2013
comment
Я также предпочитаю эту перегрузку .Add(), но в данном случае она ничем не отличается от того, что у него уже не работает. - person Joel Coehoorn; 12.09.2013
comment
Да, особенно у операторов, это также проверено и работает с моей стороны. - person Don Thomas Boyle; 12.09.2013

Попробуйте структурировать свой оператор sql следующим образом:

SELECT field,field FROM TABLE WHERE name LIKE N'%' + @name + N'%'

В результате VB выглядит так:

SqlDataSource1.SelectCommand = "SELECT field,field FROM TABLE WHERE name LIKE N'%' + @name + N'%'"
SqlDataSource1.SelectParameters.Clear()
SqlDataSource1.SelectParameters.Add("@Name", SqlDbType.NVarChar, 50).Value = TextBox1.Text
person Joel Coehoorn    schedule 12.09.2013
comment
Мне очень любопытно, почему N'%', а не просто '%'? - person Don Thomas Boyle; 12.09.2013
comment
@DonThomasBoyle Я предполагаю, что столбец name является типом NVarChar, а не просто Varchar (если это не так, вероятно, так и должно быть). Если у вас нет N, тип результирующего строкового литерала — varchar, и Sql Server должен будет выполнить дополнительную работу, чтобы преобразовать его в NVarchar, когда он объединяет его с остальной частью строки. В худшем случае отсутствие N может привести к несоответствию типов, которое не позволит серверу sql использовать индекс, что приведет к значительному падению производительности. В этом случае начальный подстановочный знак уже нарушает индекс, поэтому любая разница, скорее всего, будет небольшой. - person Joel Coehoorn; 12.09.2013