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