【问题标题】:How I can escape a double quote in a verbatim string that contains variables如何在包含变量的逐字字符串中转义双引号
【发布时间】:2018-01-01 17:32:00
【问题描述】:

我的逐字字符串包含一些变量,我的问题总是从编译器得到这个错误:

; expected

那么我该如何正确地逃避它呢?

int teacherId = sqlStatus = (int)sqlCmd.LastInsertedId;
sqlCmd.CommandText = @"INSERT INTO report (report_type, report_date, semester, report_details, teacher_id) 
                            VALUES (0, ""2018-01-01"", 1, '{
                              ""teacherId"": "" " + teacherId.ToString() + " "",   <=== error here (; expected)
                              ""mahderDate"": """",
                              ""teacherShool"": """",
                              ""baladia"": """",
                              ""wilaya"": """",
                              ""moufatecheReport"": """"
                            }'," + teacherId + ");";

【问题讨论】:

  • 想过使用string.Format吗?还是插值字符串?无论如何,简而言之,您可以使用 '\' 转义字符
  • 正确的方法是使用参数化查询来避免 SQL 注入的可能性。
  • 无论如何,这里的问题是你在teacherId.ToString()之后开始一个新的字符串。但该字符串不是多行字符串:您需要再次将 @ 放在开头引号的前面。
  • @Dave 我试过 '\' 但仍然有同样的错误。
  • 参数化查询更好,不仅因为它们可以防止 sql 注入,所以我仍然会在这里使用它们。

标签: c# escaping verbatim-string


【解决方案1】:

使用@poke 建议,我设法在行中放置双引号和@:

    int teacherId = sqlStatus = (int)sqlCmd.LastInsertedId;
    sqlCmd.CommandText = @"INSERT INTO report (report_type, report_date, semester, report_details, teacher_id) 
                                VALUES (0, ""2018-01-01"", 1, '{
                                  ""teacherId"": "" " + teacherId.ToString()  + "," + 
                               @" ""mahderDate"": """",
                                  ""teacherShool"": """",
                                  ""baladia"": """",
                                  ""wilaya"": """",
                                  ""moufatecheReport"": """"
                                }'," + teacherId + ");";

【讨论】:

  • 不过,无需将逗号放在自己的字符串中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多