Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LIKE的sql参数化查询_C#_Sql_Sql Server 2008_Sql Parametrized Query - Fatal编程技术网

C# 使用LIKE的sql参数化查询

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

我试图将一个参数传递给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附近给出了不正确的语法

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 + "%'");