假设我正在查询 Sql Server DB 的行计数,该LIKE
比较基于对通过 windows 窗体文本输入提供的值的列的比较。由于可能的用户输入导致注入,因此在此处使用参数很重要。最终我要在我命名ExecuteScalar()
的实例化对象上执行成员函数,但首先我必须添加参数。例如:SqlCommand
cmd
cmd.Parameters.AddWithValue("@param1", textBox1.Text);
Sql Server 使用特殊字符%
作为通配符匹配进行LIKE
比较。我想做的是允许用户使用*
通配符。因此,一个简单的替换:
textBox1.Text.Replace('*','%');
问题是我遇到了包含特殊符号%
和_
. 搜索文字%
而不是将其用作通配符的一种方法是将其括在方括号中:[%]
.
所以,现在我的替换必须变成:
textBox1.Text.Replace("%","[%]").Replace("_","[_]").Replace('*','%');
顺序在这里也很重要,因为如果最后一个Replace
做得更快,%
就会被错误地对待。
我不确定我是否已经覆盖了所有的基础,这里还有其他我需要担心的角色吗?这真的可以防止注射吗?有没有其他首选的方式来做到这一点?
示例查询可能是这样的:
SELECT COUNT(*) FROM [MyTable] WHERE [Column1] = @param1
您的表名在哪里MyTable
,并且Column1
是MyTable
. 我们可以假设这Column1
是某种nvarchar
类型。