【问题标题】:Grabbing string from database and putting it into variable, the variable contains 2 extra \\从数据库中获取字符串并将其放入变量中,该变量包含 2 个额外的 \\
【发布时间】:2019-10-30 15:51:35
【问题描述】:

用户可以输入一个 conn 字符串,例如: (LocalDb)\\MSSQLLocalDB,ef core 负责将其放入我的表中并正确存储。但是当我把它读出来并尝试使用它时,它包含一个额外的 2 \ e.g.(LocalDb)\\\\MSSQLLocalDB,

我使用 ef core 直接从我的数据库中获取它,并将其存储在变量中,如下所示:

     var serverConn = dbSetting.CustomerConnectionSettings.ServerConnection;

serverConn 的字符串带有额外的 \\ 导致我的连接失败, 我需要执行某种编码/解码吗?

【问题讨论】:

  • 请说明 a) 添加的是哪个字符,以及 b) 您在哪里看到的。在调试器监视窗口中,反斜杠将被转义,因为它向您显示 C# 字符串文字。为什么用户输入带有转义反斜杠的字符串?
  • 额外的 \\ 已添加,正如我的问题中所说,调试器显示 c# 字符串文字,但变量本身在使用时也包含字符串文字。 @EdPlunkett
  • 请提供一个完整的代码示例和给出的输入。我们通常不喜欢屏幕截图,但我希望看到您观察到“变量本身在使用时也包含字符串文字”的地方的屏幕截图。好消息是编译器或框架中没有在运行时随机添加反斜杠的错误。
  • 要么 1. 它以两个斜杠存储在数据库中,因此在读取时,C# 需要将它们都转义,或者 2. 您拥有的某些自定义代码将其转义两次。我的赌注是第一个。
  • 它确实在 db @Rhyous 中只存储了 2 个斜杠,我需要以不同的方式存储它吗?我认为 ef core 会为您解决这个问题。

标签: c# .net ef-core-2.0


【解决方案1】:

连接到 LocalDB ((LocalDb)\\MSSQLLocalDB) 时只需要一个斜杠。我认为您(或用户)认为您需要像在代码中那样转义斜线(例如string conString = "(LocalDb)\\MSSQLLocalDB")。

但是如果连接字符串存储在某个地方,那么您应该只使用一个斜杠。您仍然会在调试器中看到两条斜线,但如果将其打印出来,您会发现确实只有一条斜线。

【讨论】:

    【解决方案2】:

    C# 将用两个斜杠转义每个斜杠。

    在数据库中不需要转义,所以在数据库中用1个斜线存储。

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      相关资源
      最近更新 更多