根据 npgsql 未找到字段,但根据 pgadmin 存在

field not found according to npgsql, but it exists according to pgadmin

我有这行代码作为我在 C# 中的查询:

cmd.CommandText = "SELECT * 
                   FROM product 
                   LEFT JOIN category ON product.category_id = category.id 
                   WHERE product.id = @productId";

product table 有一个名为 name 的列,我需要它。

这是我在我的应用程序中用来检索它的行。

product.ProductName = reader.GetString(reader.GetOrdinal("\"product\".\"name\""));

我得到的错误是

System.IndexOutOfRangeException: Field not found

在那条线上。

reader.GetOrdinal("name");

首先,结果集没有名为 "product"."name" 的字段,而是一个名为 "name" 的字段。考虑一下,如果您尝试从 PostgreSQL 中的结果集中 select,情况也是一样的:

SELECT "product"."name" FROM
    (SELECT *
    FROM product 
    LEFT JOIN category ON product.category_id = category.id 
    WHERE product.id = @productId) subquery

不起作用,但是:

SELECT "name" FROM
    (SELECT *
    FROM product 
    LEFT JOIN category ON product.category_id = category.id 
    WHERE product.id = @productId) subquery

会。

其次,不要在字段名称上使用 PostgreSQL 转义。