【问题标题】:How to insert '' (2 apostrophes) into sql如何将''(2个撇号)插入sql
【发布时间】:2019-07-03 18:37:34
【问题描述】:

我需要在列中插入 ''(2 个撇号)。 只是没有任何文字的撇号。 但我最终插入了 \'\' (带反斜杠的撇号)

        NpgsqlCommand Cmd = new NpgsqlCommand("INSERT into Table(Col) VALUES(@value), conn);
        Cmd.Parameters.AddWithValue("@value", "''");
        Cmd.ExecuteNonQuery();

结果:\'\'出现在我的表中。

如果我使用更少或更多的撇号,它会很好地插入,但我需要正好 2,然后由于某种原因出现反斜杠。

【问题讨论】:

  • “结果:\'\'出现在我的表中”在哪里?在调试器中?在 SQL 管理控制台中?作为查询的结果,您没有向我们展示?
  • 我只是使用 PgAdmin 来目视检查表格的内容。
  • 你能修复你的代码来编译吗?我看不出 new 在 c# 中是如何工作的...
  • 您的 INSERT 语句中还缺少右括号
  • 我强烈怀疑这只是 PgAdmin 在显示值时逃避了一些事情。尝试选择值的长度,我怀疑你会看到它是 2,而不是 4。

标签: c# sql npgsql


【解决方案1】:

上面的结果似乎有很多混乱。

Npgsql 不会在参数中执行任何转义,因为它们是带外发送的,并且不会在 SQL 中处理。如果您的参数值包含一个带有两个撇号的 C# 字符串,那么它将被插入到数据库中。

在上面运行您的代码并使用 psql 后,我得到以下信息:

var cmd = new NpgsqlCommand("INSERT into foo (name) VALUES (@value)", conn);
cmd.Parameters.AddWithValue("@value", "''");
cmd.ExecuteNonQuery();
npgsql_tests=# select * from foo;
 name 
------
 ''
(1 row)

也许 pgadmin 用反斜杠显示值 - 我不知道 - 但那将是一个显示问题。

最后,如果您真的想插入一个常量值(而不是用户提供的值),则没有理由使用参数。只需将您的价值嵌入 SQL:

INSERT INTO foo (name) VALUES ('''''');

其中有六个撇号:2 个作为字符串分隔符,另外两个转义撇号(在 SQL 中,'' 是单个文字撇号的转义形式)。

但是,如果您正在读取用户的输入,请务必使用参数。

【讨论】:

    【解决方案2】:

    尝试将每个撇号加倍。

    Cmd.Parameters.AddWithValue("value", "''''");

    【讨论】:

    • 然后正常插入4个。
    【解决方案3】:

    添加一个空文本框并以某种方式使用它的文本值,让我插入双撇号。

    所以答案是

    NpgsqlCommand cmd = new NpgsqlCommand (INSERT into Table (Col) VALUES (@value);
    Cmd.Parameters.AddWithValue("@value", textBox1.text);
    Cmd.ExecuteNonQuery();
    

    其中 texBox1 只是一个空文本框。

    这可能不是最好的方法,但现在可行。

    【讨论】:

    • 空文本框的文本值将只是一个空字符串。您是想将 '' 字面意思插入一列还是一列中的空字符串?因为如果你想要一个空字符串,只需使用""String.Empty
    • 这是插入一个空字符串。我非常怀疑问题在于您如何解释您所看到的,而不是数据本身。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2010-12-27
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    相关资源
    最近更新 更多