如何在 C# 和 Npgsql 中使用不带双引号的 PostgreSQL table 名称
Howto use PostgreSQL table names without double quotes in C# and Npgsql
我正在尝试使用 Npgsql2 库从 PostgreSQL 10.5 数据库中 select 数据 - 我不能使用 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 ERROR: 42P01: relation “TableName” does not exist
双引号有效。
那么不带双引号的Npgsql可以使用吗?有什么旗帜什么的吗?
没有双引号,PostgreSQL 将所有标识符折叠为小写。这是 PostgreSQL 行为,与 Npgsql 无关 - 后者只是在您编写时传递您的 SQL。您可以切换到全小写 table 名称,在这种情况下您不再需要引号。
我正在尝试使用 Npgsql2 库从 PostgreSQL 10.5 数据库中 select 数据 - 我不能使用 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 ERROR: 42P01: relation “TableName” does not exist
双引号有效。
那么不带双引号的Npgsql可以使用吗?有什么旗帜什么的吗?
没有双引号,PostgreSQL 将所有标识符折叠为小写。这是 PostgreSQL 行为,与 Npgsql 无关 - 后者只是在您编写时传递您的 SQL。您可以切换到全小写 table 名称,在这种情况下您不再需要引号。