繁体   English   中英

如果我将 Select 与多列一起使用,如何从 Npgsql 获取值

[英]How do I get the values from Npgsql if I use Select with multiple columns

例如,如果我有这个查询:

SELECT (column1, column2, column3) FROM table

我运行了 ExecuteReader()。 如果第 1 列和第 3 列是字符串,第 2 列是整数,则为 Id。 如何从每列中获取值? 我用阅读器中的普通 Get 函数进行了尝试,我总是会得到一个 Cast Exception Error can't cast database type to string/int

/编辑这是我的测试代码:

            conn1.Open();
            string sql_reader = "SELECT (id, employee_number, first_name, last_name) FROM employee";
            using var cmd_reader = new NpgsqlCommand(sql_reader, conn1);

            var reader = cmd_reader.ExecuteReader();
            while (reader.Read())
            {
                System.Diagnostics.Debug.WriteLine(reader.GetFieldValue<int>(0));
            }
            conn1.Close();

如果我运行这段代码,我会得到一个“System.InvalidCastException”。 如果我将reader.GetFieldValue<int>(0)更改为reader.GetFieldValue<string>(1)我会收到超出范围的错误“列必须介于 0 和 0 之间”。

删除括号。

在所有其他数据库中,它们是无用的噪音,但在 Postgres 中,表达式(column1, column2, column3)创建了一个匿名记录 - 因此您的结果仅包含一个列(即包含三个字段的匿名记录)。

例如这个样本数据:

create table t1 (c1 int, c2 int, c3 int);
insert into t1 values (1,2,3);

然后这个查询:

select (c1, c2, c3) as rec
from t1;

返回:

rec    
-------
(1,2,3)

但是这个

select c1, c2, c3
from t1;

返回预期结果

c1 | c2 | c3
---+----+---
 1 |  2 |  3

在线示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM