C# ADO select语句,带SQL注入的全文搜索

C# ADO select语句,带SQL注入的全文搜索,c#,sql-server,full-text-search,sql-injection,C#,Sql Server,Full Text Search,Sql Injection,我连接到的数据库有一个带有全文搜索索引的表。这是正确的 select * from MyTable where contains(*, 'value') 在WPF中,如果我发送准确的命令,它就会工作。但是,value不是硬编码的,它是用户输入的内容,因此需要为SQL注入提供保护。问题是这样做不会返回结果。这是我的密码 DataTable dt = new DataTable(); string ConString = "Data Source=127.0.0.1,1433;I

我连接到的数据库有一个带有全文搜索索引的表。这是正确的

select * from MyTable where contains(*, 'value')
在WPF中,如果我发送准确的命令,它就会工作。但是,
value
不是硬编码的,它是用户输入的内容,因此需要为SQL注入提供保护。问题是这样做不会返回结果。这是我的密码

DataTable dt = new DataTable();

        string ConString = "Data Source=127.0.0.1,1433;Initial Catalog=MyDB;User Id=sa;Password=amazingSecurePassword;";

        using (SqlConnection con = new SqlConnection(ConString))
        {
            string sqlCMD = "select * from MyTable where contains(*, @s1)"
            SqlCommand cmd = new SqlCommand(sqlCMD, con);
            SqlDataAdapter da = new SqlDataAdapter();

            try
            {
                con.Open();
                cmd = new SqlCommand(sqlCMD, con);
                cmd.Parameters.Add(new SqlParameter("@s1", "value"));

                da.SelectCommand = cmd;
                da.Fill(dt);
                con.Close();

            }
            catch (Exception x)
            {
                //Error logic
            }
            finally
            {
                cmd.Dispose();
                con.Close();
            }
        }

编辑:@Mike评论成功了。更改SqlDbType.NVarChar修复了上述注释中提到的问题,在创建
SqlParameter
期间将
SqlDbType
设置为
NVarChar
,帮助CLR确定正确的数据类型。有关的更多信息。

请不要添加与您的问题无关的标签。我删除了WPF标签。@Sheridan,但我正在WPF中执行此操作。这怎么与WPF无关?@sasha_gud抱歉,代码来自一个方法,sqlCMD是传递的。我将“stringsqlcmd”行复制并粘贴到错误的位置。现在可以修复了。如果可能,启动SQL跟踪以查看在幕后创建的查询。查看SQL代码是否正确地传入变量。另外,在创建Mike的过程中,您是否尝试将
SQlDbType
设置为
NVarChar
?问题实际上是NVarChar!如果你将此作为答案发布,我会将其标记为答案。见鬼,把这篇文章抄过去。