gpt4 book ai didi

c# - NpgsqlDataReader - 将空值与 "NULL"文字区分开来

转载 作者:行者123 更新时间:2023-11-29 12:38:00 26 4
gpt4 key购买 nike

从数据库中读取表列时,我无法区分 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com