根据 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 转义。
我有这行代码作为我在 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 转义。