c# - 如何将''(2个撇号)插入sql
问题描述
我需要在列中插入 ''(2 个撇号)。只是没有任何文字的撇号。但我最终插入 \'\' (带反斜杠的撇号)
NpgsqlCommand Cmd = new NpgsqlCommand("INSERT into Table(Col) VALUES(@value), conn);
Cmd.Parameters.AddWithValue("@value", "''");
Cmd.ExecuteNonQuery();
结果:\'\'出现在我的表中。
如果我使用更少或更多的撇号,它会很好地插入,但我需要正好 2,然后由于某种原因出现反斜杠。
解决方案
上面的结果似乎有很多混乱。
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 中,'' 是单个文字撇号的转义形式)。
但是,如果您正在读取用户的输入,请务必使用参数。
推荐阅读
- javascript - 数组中紧挨着的数字组
- saga - Rebus Saga 的并发异常
- flutter - 如何通过 Flutter 中的使用方法 startsWith 获取由特殊字母开头的确切单词
- javascript - 从脚本更新选择器后获取样式文本
- python - 烧瓶应用程序 - 删除功能不起作用
- python - 如何使用 python-docx 获取 MS Word 中的超链接位置,或者我们可以使用其他包吗?
- python - 在python中使用碰撞引擎计算pi
- python - Pandas:遍历列索引/标签并将以相同字符串开头的列分组
- javascript - 当我在其中书写时,如何使输入类型的文本拉伸?
- typescript - 在制作自己的 useState 挂钩时,如何使用带有工厂的 Typescript 泛型作为属性?