我有这行代码作为我在 C# 中的查询:
cmd.CommandText = "SELECT *
FROM product
LEFT JOIN category ON product.category_id = category.id
WHERE product.id = @productId";
product
表有一个名为 name
的列,我需要它。
这是我在我的应用程序中用来检索它的行。
product.ProductName = reader.GetString(reader.GetOrdinal("\"product\".\"name\""));
我得到的错误是
System.IndexOutOfRangeException: Field not found
在那条线上。
最佳答案
reader.GetOrdinal("name");
首先,结果集没有名为 "product"."name"
的字段,而是一个名为 "name"
的字段。考虑一下,如果您尝试从 PostgreSQL 中的结果集中进行选择,情况将是相同的:
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# - 根据 npgsql 未找到字段,但根据 pgadmin 存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35291264/