在NpgSql中使用BeginBinaryImport插入位数据类型以进行批量数据插入

时间:2016-05-24 09:20:56

标签: npgsql

我一直在尝试使用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" };

1 个答案:

答案 0 :(得分:1)

这可能正在发生,因为当Npgsql看到布尔值时,它的默认值是发送PostgreSQL布尔值而不是BIT(1)。使用二进制COPY时,必须准确编写PostgreSQL期望的类型。

一种解决方案可能是使用.NET BitArray而不是boolean。 Npgsql将推断该类型的PostgreSQL BIT(),一切都应该有效。

但更安全的解决方案只是调用StartRow()然后使用接受NpgsqlDbType的Write()重载。这允许您明确指定要发送的PostgreSQL类型。