我一直在尝试使用Npgsql 3.1.2版为postgre数据库实现批量插入操作,但我遇到了一个问题(“消息中剩余的数据不足”) 关于postgre表中列paymentdone(bit(1))数据类型的数据类型未匹配。我曾尝试使用bool,char,整数数据类型(C#),但也有同样的错误。
public static class MyCache
{
public static NameIdObject MyCacheObject = new NameIdObject();
}
public class NameIdObject
{
public string Name { get; set; }
public int Id { get; set; }
}
// Usage 1: without new keyword
MyCache.MyCacheObject.Name = "foo";
MyCache.MyCacheObject.Id = 123;
// Usage 2: with new keyword
MyCache.MyCacheObject = new NameIdObject { Id = 123, Name = "foo" };
答案 0 :(得分:1)
这可能正在发生,因为当Npgsql看到布尔值时,它的默认值是发送PostgreSQL布尔值而不是BIT(1)。使用二进制COPY时,必须准确编写PostgreSQL期望的类型。
一种解决方案可能是使用.NET BitArray而不是boolean。 Npgsql将推断该类型的PostgreSQL BIT(),一切都应该有效。
但更安全的解决方案只是调用StartRow()
然后使用接受NpgsqlDbType的Write()
重载。这允许您明确指定要发送的PostgreSQL类型。