首页 > 解决方案 > ASP.NET postgresql NpgsqlDbType.Bit 不支持 BitArray?

问题描述

遇到一个似乎与文档相矛盾的类型错误......

在我的本地计算机上创建了一个带有 2 列的 postgresql 表(SystemID [as uuid],TrackingIDs [as Bit[],大小为 256])。

在 C# ASP.NET 中,我收到错误消息:

42804:“TrackingIDs”列的类型为 bit[],但表达式的类型为 bit

我看不到“NpgsqlDbType.BitArray”的选项,但文档说“NpgsqlDbType.Bit”应该接受 C# BitArray 对象类型:https ://www.npgsql.org/doc/types/basic.html

这是我的 C# 代码示例:

using (var connection = new NpgsqlConnection(DBUtils.connectionString))
{
    try
    {
        connection.Open();
        using (var cmd = connection.CreateCommand())
        {
            cmd.CommandText = "INSERT INTO hosts VALUES(@SystemID, @TrackingIDs)";
            cmd.Parameters.AddWithValue("@SystemID", NpgsqlDbType.Uuid, systemID);
            cmd.Parameters.AddWithValue("@TrackingIDs", NpgsqlDbType.Bit, new BitArray(256));
            return cmd.ExecuteNonQuery() != 0 ? "Success" : "Failed";
        }
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
    finally
    {
        connection.Close();
    }
}

pgAdmin4:3.6
Npgsql 版本:4.0.4
PostgreSQL 版本:11.1
操作系统:Win10 x64 ASP.NET:.NET
Core 2.2

编辑:缺少“NpgsqlDbType.Bit | NpgsqlDbType.Array”。但是我现在得到:

22026: 位串长度 1 与位类型 (256) 不匹配

标签: asp.netpostgresqlparametersbitbitarray

解决方案


所以 PostgreSQL 中的 bit 可以是任意大小,也可以被认为是复数。例如,从一个字节的角度考虑。所以解决方案是只创建一个长度为 256 的“位”类型列。然后我可以为其设置一个 BitArray(256)。


推荐阅读