gpt4 book ai didi

c# - 将带双引号和单引号的字符串从 EF 保存到 SQL

转载 作者:太空狗 更新时间:2023-10-30 00:30:56 25 4
gpt4 key购买 nike

问题的重点是 string text 格式,其他一切都只是为了上下文。如果重要的话,实际的字符串大约有 10 页长。

string text = @"
"" My string ''stringy'' with lots of ''quoties'' "" said Jimmy ''The Jimminator'' Smith.
";

API.Models.Table seedTable = new API.Models.Table()
{
Created = new DateTimeOffset(DateTime.Now),
TableText = text
};

db.Table.AddOrUpdate(seedTable);
db.SaveChanges();

这是处理将带有单引号和双引号的字符串从 EF 保存到 SQL 的正确方法吗?如果没有,正确的方法是什么? db 就是我们的 dbContext。

编辑:这个问题可能还不清楚。我担心的是,当我在 SQL Server 中发出查询或从 C# 执行 SQL 命令时,我无法在不加倍的情况下输入带有单引号的任何字符串。但是,我的问题是 EF 是否足够聪明以保存带有单引号的字符串或需要将它们加倍。

最佳答案

从 .NET 到 SQL 是 EF 需要担心的问题。关于哪些字符是特殊字符以及如何转义它们的规则因数据库而异,但在每种情况下 EF 都有代码来处理。

所以你根本不需要担心 ' 在 SQL 中是特殊的。

因此,您需要担心的是如何在 .NET 中编写有效的字符串。如果您在字符串前使用 @ 来获得逐字字符串文字,则所有字符都将按原样处理,除了 " 被转义为 ""

如果没有,则不允许使用换行符或引号,但可以使用以下转义符对它们进行转义:

  1. \u 后跟四个十六进制数字:具有该代码点的字符
  2. \U 后跟八个十六进制数字:具有该代码点的字符。
  3. \x 后跟一到四个十六进制数字:具有该代码点的字符。
  4. \a\u0007 相同(铃)
  5. \b\u0008 相同(退格键)
  6. \f\u000C 相同(换页)
  7. \n\u000A 相同(换行符)
  8. \r\u000D相同(回车)
  9. \t\u0009 相同(制表符)
  10. \v\u000B 相同(垂直制表符)
  11. \'\u0027(撇号)相同
  12. \"\u0022相同(引号)
  13. \\\u005C ()
  14. \0\u0000 相同(空字符)

并非所有这些在字符串中都是必需的,因此您可以使用 ' 而不是 \' 但它们要么难以键入,要么难以区分(如何从某些空格中区分制表符?)或在其他上下文中不允许(您需要在字 rune 字中使用 \')。

你的例子:

string text = @"
"" My string ''stringy'' with lots of ''quoties'' "" said Jimmy ''The Jimminator'' Smith.
";

等同于:

string text="\n    \" My string ''stringy'' with lots of ''quoties'' \" said Jimmy ''The Jimminator'' Smith.\n";

或者可能是:

string text="\n\t\" My string ''stringy'' with lots of ''quoties'' \" said Jimmy ''The Jimminator'' Smith.\n";

因为 SO 的标记不清楚在第一个换行符后是要空格还是制表符。

它们中的任何一个都完全相同,但是如果您拥有 '' 的原因是为了转义 SQL,那么您不应该,让 EF 去担心。有了它,您是否拥有:

string text = @"
"" My string 'stringy' with lots of 'quoties' "" said Jimmy 'The Jimminator' Smith.
";

或者:

string text="\n    \" My string 'stringy' with lots of 'quoties' \" said Jimmy 'The Jimminator' Smith.\n";

纯粹是您发现更容易编写和阅读的问题。

通常,我建议您在大多数情况下使用后一种形式,但在文本中有很多新行或有很多 \ 字符(例如正则表达式和 Windows 文件路径)。

关于c# - 将带双引号和单引号的字符串从 EF 保存到 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31836328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com