. 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ł

. net中的地址斜杠/转义单引号

您应该使用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()和其他任何方法一样好。