我在Ubuntu上运行带有.NetCore的npgsql v3.7。
当我执行select查询并且结果中的任何行中的单元格为null时,将抛出异常,并显示错误消息“Column is null”。
我不得不通过将select子句中的每一列放在case语句中来解决这个问题,该语句测试NULL
"CASE WHEN " + fieldName + " IS NULL THEN '' ELSE " + fieldName + " END "
这似乎有点极端,不应该是必要的。有没有其他人遇到这个。
感谢。
答案 0 :(得分:5)
您可能正在尝试阅读此列:
using (var reader = cmd.ExecuteReader()) {
reader.Next();
var o = reader.GetString(0); // Or any other of the Get methods on reader
...
}
如果列包含null,则此代码将失败,并且是预期的行为。在ADO.NET中,您需要在实际获取值之前使用reader.IsDBNull(0)
检查空值。这就是数据库API的工作原理。
答案 1 :(得分:1)
我不知道为什么NULL
值会给您带来错误,但您可以取消丑陋的CASE
声明,转而使用COALESCE
:
"COALESCE(" + fieldName + ", '')"
理想情况下,您应该进行配置更改,以使NULL
值不会导致此问题。