代码之家  ›  专栏  ›  技术社区  ›  bairog

C和NPGSQL中如何使用不带双引号的PostgreSQL表名

  •  1
  • bairog  · 技术社区  · 7 年前

    我正在尝试使用npgsql2库从PostgreSQL 10.5数据库中选择数据-我不能使用npgsql3或npgsql4,因为我需要支持Windows XP(最多.NET 4.0)。 我使用以下代码:

    var builder = new NpgsqlConnectionStringBuilder();
    //setting connection string variables here
    var connection = new NpgsqlConnection(builder.Tostring());
    var query = "SELECT * FROM \"TableName\" ORDER BY \"ColumnName\"";
    var adapter = new NpgsqlDataAdapter(query, connection);
    var dataSet = new DataSet();
    
    connection.Open();
    adapter.Fill(dataSet);
    

    如果查询中的tablename或columnname不使用双引号,则会失败,并出现错误:

    PostgreSQL错误:42p01:关系__tablename_157;不存在

    用双引号就行了。

    那么是否可以使用不带双引号的npgsql?有什么旗子什么的吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Shay Rojansky    7 年前

    没有双引号,PostgreSQL将所有标识符折叠为小写。这是PostgreSQL行为,与NPGSQL无关——后者只是在编写SQL时传递给您的SQL。您可以切换到所有的小写表名,在这种情况下,您不再需要引号。