在.NET中添加斜杠/转义单引号

时间:2011-05-05 14:26:49

标签: c# .net sql-server

我正在维护一段连接SQL查询的代码,如:

string sql = "SELECT* FROM table WHERE column = '" + value + "'";

现在结果表明,如果包含',则会破坏SQL Server文本语句。我搜索了类似于PHP addslashes的方法,但没有成功。有 Regex.Escape ,但它没有做到这一点。有没有其他方法可以解决这个问题,除了在字符串上调用替换方法?:

string sql = "SELECT* FROM table WHERE column = '" + value.Replace("'", "''") + "'";

谢谢, 帕维尔

4 个答案:

答案 0 :(得分:8)

您应该使用SqlCommandSqlParameter,而不是像现在一样构建查询。 正如其他人所说,你正在做的事情让你对注射攻击敞开大门。

如果你不能这样做那么就像你说的那样,替换是一个很好的选择。

答案 1 :(得分:3)

您正在打开SQL Injection攻击的代码 - 改为使用参数化查询。

作为奖励,将不再需要这些逃脱的诡计,因为图书馆将为您照顾它们。

答案 2 :(得分:3)

我建议不要使用字符串连接,你应该使用参数而不是看下面的例子

// 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);

答案 3 :(得分:1)

这是一般推荐SQL参数的关键原因。如果那不是一个选项,我认为String.Replace()和其他方法一样好。