【问题标题】:Double double quotes in the string字符串中的双双引号
【发布时间】:2014-09-20 20:06:00
【问题描述】:

在 c# 中:我需要像这样创建 oracle 查询字符串:

string orQr = @"
    SELECT ""Date"", ""Key""
    FROM TBL
";

我需要动态进行。但是转义双双引号有问题。

如何做到这一点?这有点疯狂 ;-) 并且不起作用:

string quotes = @"""""";
string subSlct = quotes + "Date" + quotes + ", " + quotes + "Key" + quotes;
string orQrB = @"
    SELECT " + subSlct + @"
    FROM TBL
";

(结果为:SELECT \"\"Date\"\", \"\"Key\"\"\ FROM TBL)

【问题讨论】:

  • 如果您真的想像这样连接字符串,请尝试使用 String.Format 而不是凌乱不可读的 +
  • 除非名称包含特殊字符,否则您不需要引用它们,例如"SELECT Date, Key FROM TBL" 应该可以正常工作。
  • poke:是的,这可能是真的,但实际上,我需要创建 oracle 动态数据透视查询,并且年-周值在列标题中(如 201429),所以我需要写“201429”

标签: c# quotes


【解决方案1】:

您的 quotes 变量添加了 两个 双引号,而不是一个。改变这个:

string quotes = @"""""";

到这里:

string quotes = @"""";

还有:

  1. string.Format("SELECT \"{0}\", \"{1}\" FROM TBL", a, b);没有错

  2. 您的代码容易受到SQL injection 的影响。

    一般来说,您希望使用参数化查询,但由于这些不允许参数化列名,您至少需要自己清理输入并检查非法字符(例如,; , --)。

【讨论】:

    【解决方案2】:

    这行得通吗:

    string quotes = "\"\"";
    

    【讨论】:

      【解决方案3】:

      不要通过字符串连接来构建查询。你对 SQL 注入攻击敞开心扉。使用参数化查询,您还可以更轻松地包含引号。

      【讨论】:

      • 参数不适用于名称,例如列名与问题中一样。
      【解决方案4】:

      您可以使用普通转义,例如:string quotes = "\"\"";

      【讨论】:

        猜你喜欢
        • 2014-09-26
        • 2014-11-27
        • 1970-01-01
        • 2012-09-27
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 2021-12-31
        相关资源
        最近更新 更多