ADO选择语句与全文搜索与SQL注入
本文关键字:搜索 SQL 注入 文搜索 选择 语句 ADO | 更新日期: 2023-09-27 18:15:06
我要连接到的数据库有一个全文搜索索引表。这可以正常工作。
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确定正确的数据类型。关于SqlParameter构造函数的更多信息,请参见MSDN。