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!如果你将此作为答案发布,我会将其标记为答案。见鬼,把这篇文章抄过去。