您好目前有问题,我想在postgres数据库中插入值,其中表包含自定义类型,如。
CREATE TYPE TestEnum AS ENUM ('Value1','Value2');
当我尝试在C#中添加参数时,由于错误的NpgsqlDbType,我总是会收到错误。所以我的问题是NpgsqlDbType用于这种自定义类型。
var parameter = new NpgsqlParameter(":p1", NpgsqlDbType.????)
{
Value = "Value1",
Direction = ParameterDirection.Input
}
感谢您的帮助。因为这个问题,我真的很生气。
答案 0 :(得分:3)
毕竟,我找到了解决问题的解决方案,尽管这不是真正的解决方案。 我现在添加一个NpgsqlDbType.Varchar参数并将一个CAST(:p1作为“TestEnum”)添加到SQL
e.g。
INSERT INTO tableName (Col) VALUES ( CAST(:p1 as "TestEnum") )
它适用于我,虽然我不认为这是一个非常好的解决方案,因为演员。 如果有人将来会找到更好的解决方案,请给我留言。 ;)
答案 1 :(得分:0)
根据 PostgreSQL 8.4.4 Documentation: 8.7. Enumerated Types :
枚举值占用磁盘上的四个字节。
这表明它们在内部存储为 32位整数。它使用系统目录pg_enum
从整数映射到名称并返回。
不幸的是, documentation for NpgsqlDbType 并未阐明每个枚举值的含义,但我的猜测是NpgsqlDbType.Integer
可能指的是32位整数。
但是,我必须承认我在这里猜测。 NpgsqlParameter
也可能需要一个表示您使用查询发送到数据库的数据的类型,这显然是一个字符串,因此如果NpgsqlDbType.Integer
不起作用,我的下一个猜测是{ {1}}。