作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从数据库中读取表列时,我无法区分 NULL 数据库类型和“NULL”文本
示例代码:
using (var connection = new NpgsqlConnection("connectionString"))
{
connection.Open();
var query = @"SELECT array_agg(a) col FROM unnest('{NULL,""NULL""}'::text[]) a";
using(var cmd = new NpgsqlCommand(query, connection)
{
using(var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var strings = rowa["col"] as string[];
Console.WriteLine(strings[0]);
Console.WriteLine(strings[1]);
}
}
}
}
strings[0]
和strings[1]
都是"NULL"
但第一个应该是空值
最佳答案
不幸的是,Npgsql 的数组处理还没有完成。它不能正确处理 NULL 元素。
从表面上看,修复起来似乎很简单。数组解码器在评估每个值之前从每个值中去除双引号。这意味着 NULL(文字)和“NULL”(字符串值)在内部都以相同的值结束,然后被解释为字符串值“NULL”。
然而,这并不像修复解码器那么简单。正确区分NULL和“NULL”之后,存储的问题就来了。 Npgsql 将数组从 PG 转换为 native .NET 数组。例如,PG text[] 到 .NET String[],PG int4[] 到 .NET Int32[]。这对 String[] 没问题,但您不能在 Int32[](或任何值类型数组)中存储 NULL 值。
要解决这个问题,数组需要以其他方式存储(可能是 NpgsqlArray 类,它允许 NULL 并提供合适的接口(interface))。不幸的是,该修复会破坏兼容性。
简短的回答是,你暂时不能在 Npgsql 中使用包含 NULL 元素的数组。
关于c# - NpgsqlDataReader - 将空值与 "NULL"文字区分开来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20419445/
我是一名优秀的程序员,十分优秀!