首页 > 解决方案 > 如何将''(2个撇号)插入sql

问题描述

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

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

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

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

标签: c#sqlnpgsql

解决方案


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

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 中,'' 是单个文字撇号的转义形式)。

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


推荐阅读