2014-02-18 1 views
0

Я не могу получить никакого ответа от следующего кода:Добавление параметров с sqlcommand.parameters.addwithvalue

using (SqlCommand cmd = new SqlCommand(@"SELECT * FROM users WHERE @parameter LIKE @value", con)) 
{ 
    cmd.Parameters.AddWithValue("parameter", parameter); 
    cmd.Parameters.AddWithValue("value", value); 

    SqlDataReader result = cmd.ExecuteReader(); 

    return result.HasRows; 
} 

Получение ложной каждый раз.

Кто-нибудь знает почему?

+1

Прежде всего, параметр SQL Server имеет ведущий '@', который вы не поставляете. Но что более важно - вы ** не можете ** передать параметр для имени столбца - если вы хотите это сделать, вам нужно будет использовать * динамический SQL * (со всеми его недостатками, бородавками и ловушками) –

ответ

0

Это неправильно синтаксис SQL

SELECT * FROM users WHERE @parameter LIKE @value 

должно быть что-то вроде

SELECT * FROM users WHERE parameter = @parameter LIKE @value 

и добавить LIKE параметр сделать это

cmd.Parameters.AddWithValue("@value","%" + value + "%"); 
0

cmd.Parameters.AddWithValue("parameter", parameter);

SqlCommand будет сделать вывод, что parameter является строкой и так будет процитировать в результате:

SELECT * FROM users WHERE 'xxx' LIKE 'yyy' 

который собирается быть ложными.

Добавить имя поля через (дезинфицированный) string.format/concatenation.

+0

благодарю вас за комментарий. есть ли элегантный способ сделать это? – jond000e