避免在postgresql

时间:2017-01-06 15:04:39

标签: c# postgresql

对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给我一个语法错误。

问题:

  1. 在pqsql中:

    我可以从谷歌看到它可以在psql中使用双引号和模式引用。 但它需要什么?

  2. 在C#中:

    有没有办法构造字符串,以便编译器接受它?

    • pgAdmin 4是版本1.0
    • PostgreSQL是版本9.6
    • C#我相信是最新版本。

1 个答案:

答案 0 :(得分:0)

除了关于转义引号的评论之外,你真的应该使用参数而不是文字。最初似乎更多的工作,但它是:

  1. 更安全(SQL注入证明)
  2. 数据库更容易 - 支持编译一次,执行多次
  3. 避免在C#中拥有疯狂的SQL语句,这些语句在整个地方都有结论或string.format
  4. 避免单引号字面值,省略数字引用,布尔值
  5. 强大的数据类型意味着没有格式化(例如日期)
  6. 以下是带参数的代码:

    NpgsqlCommand cmd = new NpgsqlCommand("insert into Test (\"Text\") " +
       " values(:TEST)", postconn);
    cmd.Parameters.AddWithValue("TEST", "It Works");
    cmd.ExecuteNonQuery();
    

    似乎我让你的生活变得更加艰难,但你的榜样却是微不足道的。当您转向具有多个参数和不同数据类型的复杂SQL语句时,您将看到真值。

    在最后的咆哮中,虽然在制作区分大小写的字段名称方面没有任何技术上的错误,但它肯定会引起头痛。你的是一个很好的例子。如果没有“测试”字段的双引号,您就不会遇到问题。