【问题标题】:Escape characters in an SQL Query [duplicate]SQL查询中的转义字符[重复]
【发布时间】:2024-05-22 22:45:02
【问题描述】:

我正在尝试使用此查询更新数据库:

string query = "UPDATE pagine SET titolo= '" + pa.titolo + @"', contenuto = '" + pa.contenuto + @"' WHERE id= " + pa.id;

我无法让它工作。更多详情请访问Updating an mdb database table

问题可能是我在标题和内容中有一些撇号。 我尝试使用 Regex.Escape 但它只是在内容中添加了大量的 \\\。

在 ASP.NET 中有什么方法可以只转义 ' 和 " 字符吗?

注意:因为我是意大利人,所以我使用意大利名称作为变量,但为了在昨天发布的另一个问题中更清楚起见,我翻译了它们。

【问题讨论】:

  • 这不是正确的方法 - 请阅读 SQL injection。使用参数,它会让你的生活变得更简单......
  • 这与您的previous question 有何不同?

标签: .net sql database escaping


【解决方案1】:

我的建议是使用 SqlCommand 对象和 SqlParameters 以避免所有连接和转义字符大惊小怪。他们会自动为您处理所有这些。此外,它们还将使您免受 SQL 注入攻击。

如果您有选择,我建议您采用类型化 DataSet 方法并为自己创建一个类型化查询。然后,您可以在代码中将其作为常规 .NET 函数调用。

【讨论】:

  • 并非所有数据库提供程序都支持参数(Odbc 不支持),因此这并不总是一种选择。
  • @user169771:是的,但是我的答案(以及大多数 SO 答案)在 OP 提供的上下文中很好。这里 OP 似乎使用的是 MDB,并且最喜欢不通过 ODBC 连接。请参阅他的其他链接问题。
【解决方案2】:

SQLParameter 更安全,因为您不会忘记清理文本。
您可以转义文本。

string userText = @"you realy shouldn't do this";

string sqlSafeText = sqlSafeText.Replace(@"'", @"''");

【讨论】:

    【解决方案3】:

    在 C# 中 你可以像下面这样逃避" -> " to \"

    "ABELE\"o\""
    

    你可以转义单个引号',如下面' to ''

    "ABELE''o"
    

    【讨论】: