C# 使用LIKE的sql参数化查询
我试图将一个参数传递给quert,但它不起作用。最好的方法是什么?我不想连接字符串。我的问题是:C# 使用LIKE的sql参数化查询,c#,sql,sql-server-2008,sql-parametrized-query,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 Pr
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附近给出了不正确的语法
AND PromptText LIKE @text
及
用一些SQL变量替换
?
,并更改命令.参数。如下所示添加
PromptText LIKE %@Text%
cmd.Parameters.Add("@Text", varYourtext);
您可以只使用字符串连接
cmd = cmd.Replace("?","'%" + text + "%'");
我终于找到了解决办法。当我使用“…LIKE%@text%”并通过command.Parameters.Add(newsqlparameter(“@text”,text))传递参数时代码>它在“@text”异常附近给出了不正确的语法
但是
我使用了“…LIKE@text”并通过command.Parameters.Add传递参数(新的SqlParameter(“@text”、“%”+text+“%”)代码>它可以工作 您得到的错误是什么?看起来SQL中的文本撇号至少缺少了相同的值。应该正确地成为参数值的一部分。@GordonLinoff“?”附近的语法不正确请接受本教程的帮助,不要使用“它不起作用”。总是写下你得到的具体错误。当你使用@text
时,你需要准确地写下正在发生的事情,并用@text.发布代码,这将完全否定参数的意义。见下面纳文的答案(基本上与乔的答案相同,但与OP的问题相比更完整、更优雅)。它有效,但违反了OP的要求,是完全错误的做法。参数化查询的一个要点是降低SQL注入攻击的可能性,但通过绕过参数,您将失去这一点。仅仅因为它起作用并不能使它成为一个有效的解决方案。@StevePettifer,。不,他们没有,但他们是一个良好的开端,也是OP想要的。你的回答仍然无效。还要检查我所说的:“降低SQL注入攻击的可能性”而不是“他们完全停止SQL注入攻击”
cmd = cmd.Replace("?","'%" + text + "%'");