Npgsql 或您的 PostgreSQL 不支持 System.UInt32 类型

Cas*_*sey 4 postgresql npgsql

使用 Npgsql V3.0.3.0,我将一条新记录添加到一个表中,该表在数据库中有一个 OID 类型的列,它应该映射到UInt32.Net 类型。

执行插入命令时,抛出以下异常“Npgsql 或您的 PostgreSQL 不支持此 .NET 类型:System.UInt32”。

异常中的堆栈跟踪是:

at Npgsql.TypeHandlerRegistry.get_Item(Type type)
at Npgsql.TypeHandlerRegistry.get_Item(Object value)
at Npgsql.NpgsqlParameter.ResolveHandler(TypeHandlerRegistry registry)
at Npgsql.NpgsqlParameter.Bind(TypeHandlerRegistry registry)
at Npgsql.NpgsqlCommand.ValidateAndCreateMessages(CommandBehavior behavior)
at Npgsql.NpgsqlCommand.ExecuteNonQueryInternal()
at Npgsql.NpgsqlCommand.ExecuteNonQuery
Run Code Online (Sandbox Code Playgroud)

此表中GetSchemaTablea的方法DataReader报告 OID 列的“数据类型”为UInt32

Sha*_*sky 5

由于 OID 是一个有点内部/非标准的字段,Npgsql 不会自动将 UInt32 写为 OID;您需要通过将参数的NpgsqlDbType字段设置为Oid.