例如,如果我有以下查询:
SELECT (column1, column2, column3) FROM table
然后我运行了ExecuteReader()。如果column 1和column 3是字符串,column 2是一个整数ID。我如何从每一列中获取值?我尝试了阅读器中的普通Get函数,我总是得到一个转换异常错误,无法将数据库类型转换为string/int
/ Edit这是我的测试代码:
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之间”。
2条答案
按热度按时间4szc88ey1#
去掉括号。
在所有其他数据库中,它们都是无用的噪音,但在Postgres中,表达式
(column1, column2, column3)
创建了一个匿名记录--所以您的结果只包含一列(即包含三个字段的匿名记录)。例如,该样本数据:
那么这个查询:
退货:
但是这个
返回预期结果
Online example
mqkwyuun2#
具体地说,在您的示例中,每一行将由长度等于4的对象数组组成。
如果您需要了解请求将返回什么,那么只需检查:
正如其他答案中提到的,如果去掉括号,将如下所示: