asp.net - 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) 不匹配
解决方案
所以 PostgreSQL 中的 bit 可以是任意大小,也可以被认为是复数。例如,从一个字节的角度考虑。所以解决方案是只创建一个长度为 256 的“位”类型列。然后我可以为其设置一个 BitArray(256)。
推荐阅读
- api - Discord Rest Api Bot,读取用户在特定公会中的角色
- codeigniter - 如何在 Codeigniter 4 中使用多个表
- r - data$colname 和 data[,"colname"] 的区别
- discord - 如何在创建嵌入之前等待用户输入
- python - 使用 yes 模式|no 模式查找精度为 2 的小数
- apexcharts - 使 x 轴值与系列相同
- java - 为什么我收到数据提供者不匹配错误?
- sql-server - 使用 SQL 根据硬编码数字对 XML 输出进行分组
- c# - 如何在不完全反序列化的情况下从对象的二进制文件中读取任意字段?
- node.js - npm 出错:NPM 不支持 NodeJS v14.11.0