使用LIKE进行sql参数化查询

时间:2014-04-02 06:40:19

标签: c# sql sql-server-2008 sql-parametrized-query

我试图将参数传递给quert,但它不起作用。最好的方法是什么?我不想连接字符串。这是我的疑问:

string cmd = @"
SELECT
    *
FROM
    TABLE
WHERE 
    p.PromptTypeID = pt.ID 
    AND p.PromptDomainID = pd.ID 
    AND p.LanguageID = pl.ID 
    AND p.VoiceID = pv.ID 
    AND p.Active='Y'
    AND PromptText LIKE ?              
ORDER BY 
    p.ID DESC";

using (SqlCommand command = new SqlCommand())
            {
                command.CommandText = cmd;
                command.Transaction = transac;
                command.Connection = cnn;
                command.Parameters.Add("?", SqlDbType.VarChar, 50).Value = "%" + text + "%";
                using (SqlDataAdapter adp = new SqlDataAdapter(command))
                {
                    adp.Fill(dt);                        
                }
            }

我无法使用LIKE运算符传递值。我也试过用@text代替"?"但它不起作用。有什么建议吗?

顺便说一下,它在'附近提供了错误的语法?' SQLEXCEPTION

4 个答案:

答案 0 :(得分:1)

?替换为某个SQL变量并更改command.Parameters.Add,如下所示

PromptText LIKE %@Text%

cmd.Parameters.Add("@Text", varYourtext);

答案 1 :(得分:0)

尝试

AND PromptText LIKE @text

command.Parameters.Add("@text"...

答案 2 :(得分:0)

我终于找到了解决方案。当我使用“.... LIKE%@ text%”并将参数传递给command.Parameters.Add(new SqlParameter("@text", text));时,它会在'@text'异常附近给出错误的语法。

但是...

我使用了“.... LIKE @text”并使用command.Parameters.Add(new SqlParameter("@text", "%"+text+"%"));传递参数。

答案 3 :(得分:-3)

您可以使用字符串连接。

cmd = cmd.Replace("?","'%" + text + "%'");