. net中的地址斜杠/转义单引号
本文关键字:转义 单引号 地址 net | 更新日期: 2023-09-27 17:54:49
我正在维护一段连接SQL查询的代码,如:
string sql = "SELECT* FROM table WHERE column = '" + value + "'";
现在发现如果value包含'字符会破坏SQL Server文本语句。我搜索了一点类似于PHP地址斜杠的方法,但没有成功。有正则表达式。转义,但它不起作用。除了在字符串上调用Replace方法外,还有其他方法来解决这个问题吗?: string sql = "SELECT* FROM table WHERE column = '" + value.Replace("'", "''") + "'";
谢谢,Paweł
您应该使用SqlCommand和SqlParameter而不是像当前那样构建查询。正如其他人所说,你所做的事情让你很容易受到注入攻击。
如果你不能这样做,那么就像你说的,替换是一个很好的选择。
我建议不要使用字符串连接,而应该使用参数,看看下面的例子
// 1. declare command object with parameter
SqlCommand cmd = new SqlCommand(
"select * from Customers where city = @City", conn);
// 2. define parameters used in command object
SqlParameter param = new SqlParameter();
param.ParameterName = "@City";
param.Value = inputCity;
// 3. add new parameter to command object
cmd.Parameters.Add(param);
你正在打开你的代码给SQL注入攻击-使用参数化查询代替。
作为奖励,这样的转义技巧将不再需要,因为库将为您处理它们。
这是通常推荐使用SQL参数的一个关键原因。如果这不是一个选择,我认为String.Replace()
和其他任何方法一样好。