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

标签 c# postgresql npgsql pgadmin

我有这行代码作为我在 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/

相关文章:

c# - 项目中不存在目标 "MSDeployTestConnection"

c# - DataContractSerializer 和已知类型

sql - strip 化 PostgreSQL 结果集的顺序

postgresql - 时间戳变量和时间变量的区别

Npgsql BeginTextImport 尝试从文件导入(而不是从 STDIN)

c# - 使用 wpf mvvm 在同一 View 上的 View 模型之间切换

postgresql - 确保存在许多列的Postgres约束?

c# - 如何将参数传递给sql 'in'语句?

C# 和 NpgsqlDataAdapter 返回单个字符串而不是数据表

c# - C# 中的数组声明语法是否有原因?