如何使用command.CommandText属性替换输入参数来防止此代码中的SQL注入?
private void button1_Click(object sender, EventArgs e)
{
BindingSource bs = new BindingSource();
SqlCommand command = new SqlCommand();
StringBuilder sb = new StringBuilder();
bs.DataSource = dataGridView1.DataSource;
if (textBox1.Text != "")
{
sb.Append("DealClassification LIKE '%@Deal%' ");
command.Parameters.AddWithValue("@Deal", textBox1.Text);
}
if (textBox2.Text != "")
{
if (sb.Length > 0) sb.Append(" AND ");
command.Parameters.AddWithValue("@Trader", textBox2.Text);
sb.Append("TraderName LIKE '%@Trader%' ");
}
command.CommandText = sb.ToString();
bs.Filter = command.CommandText.ToString();
dataGridView1.DataSource = bs;
}
字符串
1条答案
按热度按时间dw1jzc5e1#
这是错误的:
字符串
单引号内的任何内容都是文本,所以你根本没有使用参数。想想参数和引号在C#代码中是如何工作的。如果你这样做了:
型
你希望
text
参数的值是display还是只是“text”这个词。希望你能理解是后者,那么SQL为什么要有任何不同呢?这里有两种选择。你可以在SQL代码中保留通配符,而实际使用参数:
型
另一个选项是将通配符合并到参数值中:
型