[英]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.