如果你的代码写: string sql=Text1.Text;我看你根本无法过滤什么东西。因此你的答案纯粹要看你的sql语句怎么拼写。例如如果仅用于拼写在sql语法中“常量”位置,例如:
string sql_1="select year([退休时间]) from [员工--中国部] where age >"+ x;
string sql_2="select [标题] from [文章,小说] where [标题] like '"+y+"%'";
string sql_3="select * from ["+z+"]";这里,根本没有什么“过滤”概念,而是只要符合语法就行。为了符合语法,你要确保x确实是一个int类型的,所以应该写:
string x=int.parse(TextBox1.Text).ToString(); //除字符以外所有类型常量都应该用parse解析同样为了符合语法,你要确保y是 nvarchar 并且其中的'号应该写为两个'号(这是SQL语法要求的),所以应该写:
string x=TextBox1.Text.Replace("'","''");同样为了语法,只需要写:
string z=TextBox1.Text; //表名中可包含空格、特殊字符等,看SQL语法,不要轻信“过滤”之说注意,当这种将数据拼在SQL的常量部位的写法总,纯粹是为了保证SQL语法正确,我看到“过滤”二字以及在这个上面做文章的文章就觉得很成问题。以上三种(其实还有更多种)其实都是从SQL语法出发的,属于你应该把SQL语法学好,不要轻信“过滤”之说。
string sql_1="select year([退休时间]) from [员工--中国部] where age >"+ x;
string sql_2="select [标题] from [文章,小说] where [标题] like '"+y+"%'";
string sql_3="select * from ["+z+"]";这里,根本没有什么“过滤”概念,而是只要符合语法就行。为了符合语法,你要确保x确实是一个int类型的,所以应该写:
string x=int.parse(TextBox1.Text).ToString(); //除字符以外所有类型常量都应该用parse解析同样为了符合语法,你要确保y是 nvarchar 并且其中的'号应该写为两个'号(这是SQL语法要求的),所以应该写:
string x=TextBox1.Text.Replace("'","''");同样为了语法,只需要写:
string z=TextBox1.Text; //表名中可包含空格、特殊字符等,看SQL语法,不要轻信“过滤”之说注意,当这种将数据拼在SQL的常量部位的写法总,纯粹是为了保证SQL语法正确,我看到“过滤”二字以及在这个上面做文章的文章就觉得很成问题。以上三种(其实还有更多种)其实都是从SQL语法出发的,属于你应该把SQL语法学好,不要轻信“过滤”之说。
上面查询“标题”的语句凭什么不能包含'号呢?显然过滤是毫无道理的,应该正确地接受这些符号,并且按照相应的SQL语句的语法去进行正确的替换,而不是过滤。
比较强的规则里,会把sql 的关键字都过滤掉,比如 select update delete declare 等
不过后一个强规则会让用户发表的部分内容丢失,需要看实际情况决定
一般认为是以上四个
在加一些特殊字符的过滤