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

bai*_*rog 2 c# postgresql npgsql

我正在尝试使用 Npgsql2 库从 PostgreSQL 10.5 数据库中选择数据 - 我无法使用 Npgsql3 或 Npgsql4,因为我需要支持 Windows XP(最高 .NET 4.0)。\n我使用以下代码:

\n\n
var builder = new NpgsqlConnectionStringBuilder();\n//setting connection string variables here\nvar connection = new NpgsqlConnection(builder.Tostring());\nvar query = "SELECT * FROM \\"TableName\\" ORDER BY \\"ColumnName\\"";\nvar adapter = new NpgsqlDataAdapter(query, connection);\nvar dataSet = new DataSet();\n\nconnection.Open();\nadapter.Fill(dataSet);\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我在查询中没有对 TableName 或 ColumnName 使用双引号 - 则会失败并出现错误:

\n\n
\n

PostgreSQL 错误:42P01:关系 \xe2\x80\x9cTableName\xe2\x80\x9d 不存在

\n
\n\n

用双引号就可以了。

\n\n

那么是否可以使用不带双引号的Npgsql呢?有旗帜什么的吗?

\n

Sha*_*sky 5

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