对C#和postgresql不熟悉,但对开发和数据库不熟悉,我试图建立从C#.NET到postgresql的连接。我一直遇到同样的语法错误。
在postgresql中我创建了一个表" Test
"一列" Text
"。
要将数据插入表格,请在pgAdmin 4中使用:
insert into public."Test" ("Text") values('It Works!')
这很有效。
现在我在C#中尝试这个,我与数据库有一个有效的连接:
1 NpgsqlCommand cmd = new NpgsqlCommand("insert into Test ("Text") values('It Works!')", postconn);
2 cmd.ExecuteNonQuery();
这给我一个编译错误。显然来自所有的双引号。 如果我将命令文本更改为:
"insert into Test ('Text') values('It Works!')"
在文本周围用单引号编译器很高兴,但Npgsql给我一个语法错误。
问题:
在pqsql中:
我可以从谷歌看到它可以在psql中使用双引号和模式引用。 但它需要什么?
在C#中:
有没有办法构造字符串,以便编译器接受它?
答案 0 :(得分:0)
除了关于转义引号的评论之外,你真的应该使用参数而不是文字。最初似乎更多的工作,但它是:
string.format
以下是带参数的代码:
NpgsqlCommand cmd = new NpgsqlCommand("insert into Test (\"Text\") " +
" values(:TEST)", postconn);
cmd.Parameters.AddWithValue("TEST", "It Works");
cmd.ExecuteNonQuery();
似乎我让你的生活变得更加艰难,但你的榜样却是微不足道的。当您转向具有多个参数和不同数据类型的复杂SQL语句时,您将看到真值。
在最后的咆哮中,虽然在制作区分大小写的字段名称方面没有任何技术上的错误,但它肯定会引起头痛。你的是一个很好的例子。如果没有“测试”字段的双引号,您就不会遇到问题。